@serogapelmeshek

Как создать бота для добавления надписей на фото?

Доброго времени суток.
Х<очу создать телеграм бота, который будет принимать фотографию присылаемую пользователем, вставлять на неё случайную надпись (из заготовленных) и потом отправлять обратно пользователю.
Одни из примеров:
@vsratoslavbot
@super_rjaka_demotivator_bot



  • Вопрос задан
  • 3926 просмотров
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Это самый простой код на 30 строчек в качестве примера!
Скачиваете картинку 1.jpg Потом кидаете в папку со скриптом любой шрифт(желательно рукописный) "font.ttf"
import telebot
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont

token = 'Здесь нужно вписать токен вашего бота'
bot = telebot.TeleBot(token)

def generate_doc(first_name, second_name):

	img = Image.open('1.jpg')

	font = ImageFont.truetype('font.ttf',30) # Загрузка шрифта и установка размера
	font_color = (74,75,69) # Цвет шрифта
	first_name_pos = (585,172) # Координаты первой буквы фамилии на картинке 1.jpg
	second_name_pos = (505,205) # Координаты первой буквы имени

	drawing = ImageDraw.Draw(img)
	drawing.text(first_name_pos,first_name,font=font,fill=font_color)
	drawing.text(second_name_pos,second_name,font=font,fill=font_color)

	return img

@bot.message_handler(content_types=['text'])
def repeat_all_message(message):

	string = message.text
	s = string.split(' ')
	if len(s) == 3:
		image = generate_doc(s[0],s[1]+' '+s[2])
		image.save('test.jpg')
		bot.send_photo(message.chat.id,photo=open('test.jpg','rb'))
	else:
		bot.send_message(message.chat.id,'Ошибка! Введите имя, фамилию и отчество через пробел.')

if __name__ == '__main__':
	bot.polling(none_stop=True)

5e5687658a1d7075945855.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ну я бы сделал так: бот сохранят фото от пользователя во временной директории, затем с помощью imagemagick(можно вызвать с помощью os.system) накладывает надпись на фото и отправляет обратно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы