Как сделать стикеры в Телеграмме из фотографии Айфоне

Уже давно прошло то время, когда люди пользовались скобками и двоеточиями, и настало время ярких и красивых стикеров. Однако, многие стикеры со временем приедаются и уже не дают эффекта эмоции. Поэтому некоторые пользователи задумываются как сделать свой стикер и ищут пути решения. На деле это занимает всего несколько минут, требуется лишь установка стороннего софта. Далее мы рассмотрим, как создать свои стикеры в Telegram на различных устройствах.

Требования к стикерам

Для создания стикера вам потребуется картинка любого размера, однако, чтобы ее загрузить, следует знать, что телеграмм поддерживает стикеры размером 512х512 пикселей и форматом PNG.

На телефоне

Рассмотрим по одному примеру создания стикеров на Android и iPhone устройствах.

Android

Существует множество приложений для создания наборов стикеров, но мы рассмотрим на примере «Stickers Creator Ad».

Инструкция создания стикеров на Android:

  1. Первое, что следует сделать – это зайти в Google Play и скачать приложение «Stickers Creator Ad».
  2. Далее заходим в приложение и нажимаем на крестик, после чего откроется галерея для выбора фотографии, которая в будущем станет стикером.
  3. Затем открывается наша выбранная фотография, которую нужно обрезать. Однако, следует знать, что обрезать очень маленький фрагмент не получится. Программа попросту не даст этого сделать, поэтому выбирайте область побольше.
  4. После того как мы обрезали картинку, нам предлагают стереть фон, если это необходимо. Здесь же можно приблизить или отдалить картинку.
  5. Далее можно изменить ориентацию или отзеркалить стикер.
  6. И в заключении можно добавить эмодзи.
  7. Ваш стикер готов, теперь его можно загрузить из галереи.

Как сделать стикер из фотографии? #shorts

Подробная инструкция Как загрузить свои стикеры в Телеграм

iPhone

В качестве примера возьмем приложение «Stickers for Telegram».

Инструкция как сделать стикеры на iPhone:

  1. Открываем AppStore и загружаем приложение «Stickers for Telegram».
  2. Далее нажимаем на крестик и выбираем нужное фото.
  3. Затем выбираем ту область, из которой желаете сделать стикер. Для продолжения нажимаем на самолетик.
  4. Теперь всё готово, можете сразу сохранить стикер в нужном формате PNG.

На компьютере

Для того, чтобы создать набор стикеров при помощи компьютера существует два способа. Первый это создать стикер онлайн, а второй – с помощью программы. Рассмотри два случая.

Через сайт

  1. Для начала находим интересную картинку, например, можно ввести в Google запросы «Коты».
  2. Далее выбираем понравившуюся картинку и сохраняем ее на рабочий стол.
  3. Затем следует выбрать онлайн сервис для создания стикеров. Вы можете выбрать любой, который вам нравится. В нашем случае будем рассматривать сервис PIXLR. Переходим на сайт https://pixlr.com/x/ и нажимаем «Open Photo». Загружаем картинку.
  4. Картинка успешно загружена на сервис. Первое, что следует сделать – это изменить размер 512х512 пикселей, для этого следуем инструкциям на фото.
  5. Нажимаем «Apply». Далее добавим надпись к фотографии.
  6. Готово, осталось только сохранить свой стикер. Учтите, что при сохранении файла следует указать формат PNG. Для этого нажимаем кнопку «Save» справа внизу и выбираем формат PNG.
Еще по теме:  Как ставить статус в Телеграмме

Когда все стикеры будут готовы можете загрузить их в Телеграмм

С помощью программы Adobe Photoshop

Воспользуемся программой Adobe Photoshop.

  1. Открываем программу и загружаем картинку.
  2. Далее находим вкладку «Контуры», в ней выбираем «Рабочий контур» и нажимаем на «Образовать выделенную область».
  3. Затем выбираем значение равное единице в радиусе растушевки и нажимаем «ОК».
  4. Осталось сделать размер картинки 512х512. Для этого нажимаем «Файл» → «Новый», после чего открывает окошко, в котором указываем нужный нам размер.
  5. Теперь ваша картинка готова, осталось ее сохранить в формате PNG.

Видео

Видео: создаём свои стикеры для Telegram в Adobe Illustrator

Смотрите инструкцию: Как добавить свой набор стикеров в Телеграм

Теперь вы знаете как легко и быстро создать свои стикеры в телеграмме. Для этого потребуется загрузить сторонний софт и выбрать абсолютно любую фотографию. В дополнении следует сказать, что для пака стикеров потребуется сделать несколько стикеров.

Рекомендуемые сервисы для Telegram:

  • Godlikes — Качественные подписчики по специальной цене! Стоимость 1-го подписчика всего 5,5 рубля! ⚡️ 5 дней контроля отписок!
  • Morelikes — Накрутка просмотров: 128 руб. за 100 шт., подписчиков: боты от 0.74 руб , живые подписчики от 3.36 руб. за 1 шт.
  • Bosslike.ru — ⚡️⚡️⚡️ Бесплатные подписчики и просмотры ⚡️⚡️⚡️
  • Mrpopular — подписчики от 0.14 руб ⚡️; просмотры от 0.09 руб ⚡️

Источник: telegrammix.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

Рейтинг
( Пока оценок нет )
Загрузка ...