Вы уже успели оценить забавные наклейки Телеграм? А мы предлагаем попробовать себя в качестве автора. Узнайте, как сделать свои стикеры для Telegram. С нашей инструкцией у вас всё получится!
Сделать стикер в Телеграм из фото или картинки: подготовка
Популярный мессенджер предлагает пользователям проявить дизайнерские таланты. Каждый неленивый может выяснить, как создать стикеры в Телеграмме, а затем применить знания на практике.
Для начала стоит выполнить подготовительную работу, чтобы дальнейший процесс шёл веселее. Для подготовки, если в качестве исходника вы будете использовать личный фотоархив, вам даже интернет не понадобится. И не нужны графические редакторы типа фотошопа. Достаточно будет базовой программы Paint . Но удобнее всё делать на компьютере. Итак, займёмся подготовкой исходного файла.
Инструкция для первого этапа , как сделать стикер из фото:
Делаю свои стикеры
- Выбираем из своего архива снимок или картинку, которые станут наклейкой.
- Нажимаем на фото правой кнопкой мышки, выбираем команду «Изменить».
- При необходимости обрезаем снимок, оно должно стать квадратным или близким к этой форме.
- Изменяем размер, подставляем значение 512 пикселей по вертикали, горизонталь должна быть столько же или меньше.
- Сохраняем файл в формате PNG .
Вот и всё, что требовалось. Точно так же обработайте другие снимки, которые хотите превратить в стикеры. Конечно, можно проявить фантазию и творчество: добавить рисунок, вырезать объект, наложить текст. Но наша задача освоить, как делать стикеры, пока самые простенькие.
Будьте осторожнее, используя чужие фотографии, скачанные из интернета. Вы можете нарушить авторское право.
И еще важное добавление: заниматься изготовлением наклеек проще на ПК. Так что установите веб-версию или десктопное приложение Телеграм на свой компьютер. А если не хотите, сохраните подготовленное фото в телефоне.
Создаём свои наклейки – общение с ботом
Когда подготовка завершена, пора приступать к завершающему этапу. Телеграм — самый роботизированный мессенджер. Хотите знать, как сделать свои стикеры для Telegram, придётся обращаться к боту:
- Начинаем с ним чат.
- Робот предложит вам список команд. Выбираем первую /newpack.
- Затем вам нужно придумать название для набора.
- Потом вас познакомят с требованиями к фото, но мы их уже выполнили. На прозрачность, тень и обводку не обращайте внимание.
- Прикрепляем к сообщению готовое фото, обязательно отмечаем, что отсылаем его как файл.
- Далее надо выбрать, какому смайлу будет соответствовать ваша наклейка.
- Когда все снимки бот принял, вам останется только придумать слово для ссылки, пишите только последнюю часть. Можно еще поставить обложку для набора.
После этого вы получите собственные стикеры и ссылку на них, её вы можете разослать всем, кому пожелаете. То же самое можно проделать и в телефоне. Наладить сотрудничество с ботом у вас получится прямо в разделе «Стикеры и маски», там есть необходимая ссылка.
Источник: telegramzy.ru
Фонд золотых цитат: как сгенерировать стикеры из сообщений в Telegram
Все началось с одной из учебных групп в Telegram. Студенты там очень любят делать стикеры из сообщений своего преподавателя. Я выяснил, что делаются они в полуавтоматическом режиме: сообщение пересылается в бота, который рисует «пузырек» сообщения, а результат пересылается в официального стикер-бота.
Схема рабочая, но напрашивается идея минимизировать количество пересылок. Тем более, что в Telegram существуют боты, создающие пользовательские стикерпаки. Рассказываю, как сделать такого бота без лишних телодвижений, и даю свое творение на тест. Если не хотите запариваться с созданием бота, но не против запечатлеть парочку своих золотых цитат для потомков, — прошу под кат.
Концепт идеи прост: пользователь пересылает сообщение в диалог с ботом, бот создает стикер.
Чтобы было интереснее, введем дополнительные ограничения:
- никаких баз данных, даже встроенных;
- никаких промежуточных файлов, стараемся делать все в памяти.
- вся информация хранится в Telegram, у бота нет данных — не нужно думать о резервном копировании;
- для запуска бота нужен только код и файл конфигурации;
- бот может быть запущен даже на Raspberry Pi (кстати, сервер с этим одноплатником можно получить в Selectel в течение часа).
Основа
Итак, регистрируем нового бота или используем старого. Все операции с ними производятся через официального BotFather. Для начала хватит идентификатора бота (username) и токена для API.
Представленный в статье код адаптирован для объяснения в контексте статьи. Ссылка на оригинальный исходный код будет в конце.
Для Bot API уже есть обертка, названная python-telegram-bot. В статье используется версия 13.4.1. Создаем простой обработчик текстовых сообщений:
def on_message_received(update: Update, context: CallbackContext): # Игнорируем все события, кроме получения сообщения if not update.message: return # Если идентификатор чата не равен идентификатору отправителя, # то бота включили в группу. Игнорируем. if update.message.chat_id != update.message.from_user.id: return # Синтетическое ограничение: хотим работать только с пересланными сбщ if not update.message.forward_from: update.message.reply_text(«Only forwarded messages supported!») return print(update.message)
Создаем бота и регистрируем обработчик.
import toml from telegram.ext import Updater, MessageHandler, Filters config = toml.load(‘dsb.toml’) bot = Updater( token=config[«telegram»][«token»] ) bot.dispatcher.add_handler( MessageHandler(Filters.update.message, on_message_received) ) bot.start_polling() bot.idle()
Теперь боту можно переслать любое сообщение, и он выведет в stdout данные, которые ему доступны.
Вывод обработчика сообщений без чувствительных данных
< ‘message_id’: 391, ‘date’: 1640260315, ‘chat’: < ‘id’: 00000001, ‘type’: ‘private’, ‘username’: ‘someone-s-username’, ‘first_name’: ‘Пример’, ‘last_name’: ‘Примерыч’ >, ‘forward_from’: < ‘id’: 0000002, ‘first_name’: ‘Иван’, ‘is_bot’: False, ‘last_name’: ‘Иваныч’, ‘username’: ‘totally-not-a-bot’, ‘language_code’: ‘en’ >, ‘forward_date’: 1640259241, ‘text’: ‘пример!’, ‘entities’: [], ‘caption_entities’: [], ‘photo’: [], ‘new_chat_members’: [], ‘new_chat_photo’: [], ‘delete_chat_photo’: False, ‘group_chat_created’: False, ‘supergroup_chat_created’: False, ‘channel_chat_created’: False, ‘from’: < ‘id’: 00000001, ‘type’: ‘private’, ‘username’: ‘someone-s-username’, ‘first_name’: ‘Пример’, ‘last_name’: ‘Примерыч’, ‘language_code’: ‘ru’ >>
В представленном выводе доступна следующая информация:
- forward_from — информация об авторе пересланного сообщения;
- text — текст пересланного сообщения.
# получаем первую (текущую) аватарку пользователя result = context.bot.get_user_profile_photos( update.message.forward_from.id, limit=1 ) # type: UserProfilePhotos # Обрабатываем ситуацию, когда аватарки нет, или она скрыта настройками приватности if result.total_count > 0: file = context.bot.get_file(result.photos[0][0].file_id) # type: File
Вызов get_user_profile_photos() возвращает двумерный массив записей типа File. Первое измерение задает количество аватарок у пользователя, но не больше limit. Второе измерение задает аватарку разных размеров. В нашем случае достаточно забрать первую попавшуюся картинку, но для оптимизации стоит сразу выбирать картинку подходящего разрешения.
Объект file имеет метод download_as_bytearray(), что позволяет загрузить аватарку в память без использования промежуточных файлов.
Теперь, когда есть необходимая информация, можно нарисовать «пузырек».
Рисуем стикер
Пример созданного изображения
Для рисования используем библиотеку Pillow версии 8.4.0. Шрифт — OpenSans, такой же используется в официальных приложениях Telegram.
Мессенджер накладывает ограничение на стикеры: как минимум одна сторона должна быть размером 512 пикселей. Так как мы генерируем сообщение, то можно зафиксировать ширину, а высоту рассчитывать в зависимости от количества текста.
# Импортируем шрифт, кегль 26 OPEN_SANS = ImageFont.truetype(‘OpenSans.ttf’, 26) # Разбиваем сообщение на строки из расчета, # что в одной строке не больше 30 символов text = textwrap.wrap(update.message[«text»], width=30) # Получаем высоту шрифта font_height = OPEN_SANS.getsize(text[0])[1] # Рассчитываем высоту картинки height = font_height * (len(text) + 1) + 2*BUBBLE_PADDING if height > 512: raise OverflowError(«Image too big»)
Функция textwrap.wrap() разбивает строку на массив строк, пытаясь сделать перенос по пробелам. Расчет высоты картинки прост:
- отступ от начала — BUBBLE_PADDING, в моем случае 10px;
- имя отправителя — font_height;
- сообщение — font_height * len(text);
- отступ до конца — BUBBLE_PADDING.
# Скачиваем аватарку как массив байт data = file.download_as_bytearray() # Класс Image из Pillow умеет читать только из потоков, # создаем виртуальный байтовый поток avatar = Image.open(BytesIO(data)) # type: Image.Image # Аватарки в Телеграме квадратные, поэтому просто масштабируем # до желаемого размера size = (AVATAR_SIZE, AVATAR_SIZE) avatar = avatar.resize(size, Image.ANTIALIAS) # Создаем круглую маску mask = Image.new(‘L’, size, 0) draw = ImageDraw.Draw(mask) draw.ellipse((0, 0) + size, fill=255) # Заполняем прозрачным по маске avatar = ImageOps.fit(avatar, mask.size, centering=(0.5, 0.5)) avatar.putalpha(mask)
Теперь у нас есть сообщение и аватарка. Создаем «холст» и начинаем рисовать. Обязательно выбираем цветовой режим RGBA и делаем прозрачный (alpha = 0) основным цветом «холста».
# Создаем изображение img = Image.new(‘RGBA’, (width, height), color=(255, 255, 255, 0)) # Создаем холст, на котором рисуем d = ImageDraw.Draw(img) # Если есть аватарка – вставляем, если нет – рисуем синий круг if avatar: img.paste(self.avatar, (0, 0)) else: d.ellipse((0, 0, AVATAR_SIZE, AVATAR_SIZE), fill=»blue») # Рисуем черный пузырек d.rounded_rectangle((BUBBLE_X_START, 0, width, height), fill=»black», radius=BUBBLE_RADIUS) # Первая строка – розовый заголовок, имя d.text( (TEXT_X_START, BUBBLE_PADDING), update.message.forward_from.first_name, fill=»pink», font=OPEN_SANS ) # Вторая и последующие строки – текст сообщения offset = BUBBLE_PADDING + font_height for line in self._text: d.text((TEXT_X_START, offset), line, fill=»white», font=OPEN_SANS) offset += font_height
Финальный штрих — сохранить изображение. Так как мы все держим в памяти, то сохраняем также в виртуальный байтовый поток.
sticker = BytesIO() # Для прозрачности сохраняем в PNG img.save(sticker, ‘PNG’) # Отматываем поток на начало, чтобы из него можно было считать sticker.seek(0);
Осталось совсем немного: загрузить стикер в Telegram и передать его пользователю.
Заполнение набора стикеров
Те, кто создавал собственные наборы, знают, что для всех операций со стикерами необходимо обращаться к боту Stickers. Однако, в Bot API есть набор вызовов для взаимодействия со стикерами, в том числе функция создания набора. Созданный ботом набор стикеров имеет следующие особенности:
- уникальное имя набора (используется в ссылках вида https://t.me/addstickers/ ) обязательно должно заканчиваться на _by_%BOT_USERNAME%;
- набор стикеров принадлежит пользователю и может быть отредактирован через бота Stickers;
- для управления набором стикеров через бота требуется его уникальное имя и идентификатор пользователя.
Имя бота в уникальном имени набора неявно используется для аутентификации действий бота. Так, зная идентификатор пользователя, произвести деструктивные действия с набором не получится.
Эта «особенность» исправляется хэшированием. Мне показалось подходящим использовать UUIDv5, который использует SHA-1 для хэширования. Правда, UUIDv5 не соответствует сразу двум ограничениям Telegram:
- может начинаться с цифры;
- имеет запрещенные символы — дефисы.
# id пользователя + соль sid = f»-» # Генерируем uuidv5 и конвертируем в строку uid = str(uuid.uuid5(uuid.NAMESPACE_X500, sid)) # Удаляем дефисы uid = uid.replace(«-«, «») # В качестве буквенного префикса используем s sticker_set_name = f»s_by_»
Теперь у нас все есть, создаем набор с первым стикером.
context.bot.add_sticker_to_set( user_id=update.message.from_user.id, name=sticker_set_name, emojis=DEFAULT_EMOJI, png_sticker=bio )
Если функция вернула True, то стикерпак создан. Если мы хотим добавить еще один стикер, то сперва набор нужно найти.
# get_sticker_set выбросит исключение, если набора нет. # Это можно использовать для определения, когда нужно создать набор. sticker_set = context.bot.get_sticker_set(sticker_set_name) # type: StickerSet # Наборы ограничены по 120 стикеров if len(sticker_set.stickers) >= 120: update.message.reply_text(«Sticker set is full») return # Добавляем! context.bot.add_sticker_to_set( user_id=update.message.from_user.id, name=sticker_set_name, emojis=DEFAULT_EMOJI, png_sticker=bio )
Стикеры добавляются в набор мгновенно, но у пользователей отображаются в течение нескольких часов. Наиболее оперативный способ обновить набор — удалить из сохраненных наборов и добавить заново.
В качестве ответа бот будет отправлять только что добавленный стикер, подтверждая, что он действительно загружен.
sticker_set = context.bot.get_sticker_set(sticker_set_name) # type: StickerSet update.message.reply_sticker(sticker_set.stickers[-1])
Вот и все, бот готов.
Конечно, это далеко не продуктовый вариант, так как Emoji не поддерживаются, существует ограничение на 120 стикеров на человека и совершенно нет кастомизации сообщений. Но для начала сойдет.
Заключение
Еще один маленький шажок для автоматизации рутинных процессов. Генерация стикеров — не самый популярный случай, но, если вдруг захочется автоматизировать, теперь вы знаете как.
Для быстрого тестирования можете использовать моего бота: ohmyquotebot (если что, он не будет жить вечно). Бот не отвечает на команду /start, так что не волнуйтесь и просто пересылайте ему сообщение, из которого хотите сделать стикер.
Исходный код доступен на GitHub.
Источник: habr.com
Стикеры в Telegram
Переписка в мессенджере может выглядеть монотонно-однообразной, если ее не разнообразить картинками, выражающими эмоции, либо просто интересными вставками.
Что такое стикеры и стикер-паки в Телеграмме?
Использование стикеров упрощает переписку, заменяя большое количество слов для выражения эмоций одной картинкой.
Стикер – это небольшая наклейка без заднего фона, содержащая картинку, выражающую определенное отношение, подогнанная для пересылки в мессенджере. Первые стикеры появились в 2010 году, заменив стандартизированные эмодзи.
Для создания наклеек используются нарисованные картинки, коллажи или фрагменты фотографий. Рисунок может дополняться текстом, усиливая эффект восприятия эмоции.
Как и в других приложениях, стикеры в Telegram собраны в группы, объединенные общим героем или стилем. Такие группы называются стикер-паками.
Технические требования к стикерам
- Чтобы наклейку использовать при переписке необходимо изображение в формате PNG.
- Размер стикера должен быть в пределах квадрата со стороной 512 пикселей, где одна из сторон может быть чуть меньше.
- Хорошо, если наклейка будет иметь белую обводку и тень, тогда ее лучше будет видно.
Как быстро сделать стикеры для Telegram самостоятельно?
В мае 15 года Телеграмм запустил программу, позволяющую пользователям самим создавать стикеры, подходящие для пересылки внутри мессенджера.
Для этого нужно подобрать изображения в формате PNG размером 512×512 количеством не более 120 картинок.
- /newpack — создать новый стикер пак.
- /addsticker — добавить стикер в существующий стикер пак.
- /delsticker — удалить стикер в существующий стикер пак.
- /ordersticker — поменять порядок стикеров в стикер паке.
- /stats — получить статистику по стикеру
- /top — получить лучшие стикеры / продвинуть стикер в топ.
- /packstats — получить статистику по стикер паку.
- /packtop — получить лучшие стикер паки / продвинуть стикер пак в топ.
- /cancel — отмена текущей операции.
Приложения для телефона
Можно создавать стикеры на смартфоне, используя для этого специальные приложения.
Android
Для создания наклеек в Телеграмм на гаджетах с ОС Андроид в Google Play можно найти приложение, задав в поисковике запрос «стикеры для телеграмм». Среди предложенных приложений выбрать «Stickergram (Sticker Builder)» — бесплатную программу для создания и редактирования изображений в Телеграмм.
Программа проста в использовании и подходит для преобразования картинок или фотографий. Для создания стикера необходимо:
- В открытом приложении активировать функцию «Создать стикер»;
- Выбрать изображение с помощью одноименной строки;
- Открыть подходящее изображение для редактирования и кадрировать его;
- Очистить фон вокруг выбранного фрагмента;
- Сделать обводку и добавить тень по желанию;
- Завершить редактирование, сохранив результат.
iPhone
Для Айфона в App Store найти бесплатное приложение «Sticker Tools». После скачивания и установки программы на смартфон можно самостоятельно создавать пакеты стикеров, действуя следующим образом:
- открыть выбранную картинку в приложении, импортировав ее с телефона;
- выделить фрагмент, удалив лишний фон с помощью инструментов;
- сделать текстовые вставки;
- сохранить полученную картинку.
- запустить бот, нажав на «Старт»;
- ввести команду /newpack;
- добавить в сообщение файл с изображением;
- следом отправить смайлик с нужной эмоцией;
- повторять процесс пока не добавятся все выбранные картинки и эмоции;
- активировать /publish;
- вставить имя для пакета в короткую ссылку (можно использовать только буквы латинского алфавита);
- открыть ссылку на стикер-пак и добавить его.
Веб-сервисы
Для создания стикеров в веб-версии мессенджера лучше использовать фотошоп, запросив у бота в Телеграмм psd-шаблон.
Важно помнить, что полученную картинку нужно сохранять в формате png.
Создание из фотографий
Фотошоп – идеальная программа для создания стикеров из фотографий. Алгоритм действий такой:
- Открыть фотошоп и создать файл размером 512×512;
- Выбрать прозрачный фон;
- Импортировать фотографию;
- С помощью «быстрого выделения» обвести нужный фрагмент;
- Выровнять контур, используя инструмент «Выделение и маска», далее «Радиус», «Сглаживание» и «Контрастность»»
- Перенести копию выделенного фрагмента на новый слой;
- Во вкладке «Слои» с помощью клавиш Ctrl + T выбрать «Перемещение»;
- Уменьшить фрагмент, зажав Shift;
- В «Параметрах наложения» сделать обводку и наложить тень;
- С помощью инструмента «Текст» сделать надпись, добавив обводку и тень;
- Нажать «Файл» и в выпавшем окне выбрать «Экспортировать» — «Быстрый экспорт в PNG»;
- Сохранить результат.
Как создать стикер-пак для продажи?
Стикеры в Телеграмм находятся в бесплатном доступе, поэтому создать стикер-пак для продажи не получится.
Как добавить свои стикеры пошагово?
- Дать боту команду /newpack и указать задуманное название стикер-пака;
- Выбрать и отправить картинку и соответствующую ей эмоцию. Повторять операцию пока не закончатся выбранные фрагменты в пределах 120 изображений;
- Ввести команду /publish и указать короткое имя набора, набранное латинскими буквами длиной не менее 4-х знаков. Это обозначение будет использоваться в ссылке;
- В случае ошибки весь процесс можно отменить командой /cancel;
- Далее бот пришлет ссылку на пакет наклеек, которую можно будет отправить друзьям и в банк стикеров Телеграмм.
Как найти готовые telegram stickers?
Готовые стикеры находятся в каталоге стикеров или их можно найти обратившись к роботу. Указав эмоцию, бот предложит варианты наклеек на выбор.
Как отправить стикер собеседнику?
Чтобы отправить картинку в чат, нужно в теле беседы нажать на «Смайлик» и в последней вкладке с изображением наклейки выбрать стикер-пак. Новый набор будет в верху списка.
Выбрав пакет наклеек, нажать кнопку «Добавить». Затем открыть набор и выбрать нужную эмоцию, кликнув по ней.
Как перенести стикеры из Телеграмма в ВК и наоборот?
У пользователей мессенджера Telegram и соц.сети «ВКонтакте» есть возможность обмениваться наборами наклеек.
Процесс не легкий и проводится на компьютере:
- В коллекции стикеров Телеграмм выбрать пакет и кликнуть на названии левой кнопкой мыши;
- В открывшейся галерее выбрать стикер и нажать на него;
- На развернутой картинке кликнуть правой кнопкой и в выпавшем меню выбрать «Исследовать элемент»;
- В новом окне для разработчиков перейти в «Elements»;
- Отыскать в списке html-тег img с идентификатором «lightboxImage»;
- Сохранить адрес начальной картинки, расположенный после сочетания «src»;
- Используя ссылку, открыть новую страницу с изображением и с помощью «Сохранить изображение как…», перенести картинку в отдельную папку.
Далее, присоединившись к группе «Стикеры Вконтакте» ((https://vk.com/vkstickers), вставить выбранные наклейки в тело колонки «Предложить новость». Коротко описать пакет и активировать кнопку.
Загруженные наклейки должны будут пройти модерацию, только после этого их можно будет использовать.
В обратном порядке из соц.сети в Telegram процесс пройдет так:
- Выбрать понравившийся пакет наклеек и перейти по ссылке типа https://vk.com/stickers/nazvanie;
- Кликнув на картинке правой копкой мыши, открыть изображение на новой странице;
- В адресе открывшегося окна , где «хххх» — имя определенной картинки, изменить 128 на 512;
- Вызвать контекстное меню картинки и нажать «Сохранить как…».
Как удалить стикеры из Телеги?
Если набор стикеров разонравился, то его можно удалить.
Создателю
Автор стикер-пака может удалить свое творение, дав боту команду /delsticker и послав ненужную картинку. Команда /delpack и ссылка на пакет удалят набор полностью.
Но стоит знать, что стикер-пак сохраниться у пользователей, которые его уже установили.
Пользователю
Для удаления стикеров в мобильной версии необходимо на вкладке выбора стикеров зайти в настройки и с помощью опций ( три вертикальных точки) выбрать удаление пакета.
В веб-версии на панели выбора наклеек перейти в настройки (шестеренка). В выпавшем списке отметить ненужные наборы, кликнув на корзину, и подтвердить удаление.
Еще один способ – это использовать крестик в верхнем углу возле названия стикерпака.
Источник: o-telegram.ru