Аним эмодзи Телеграм собрать свой набор из разных

У вас есть телефон Android, и вы с завистью наблюдаете, как ваши друзья, владеющие iPhone, отправляют пользовательские смайлы своих лиц? Это называется Memoji, и есть способы получить аналогичную функцию на Android.

Python + PIL + Pyrogram = Кастомные эмодзи для Telegram

Телеграм — один из самых популярных, если не самый популярный мессенджер в рунете. Многие ведут в нём личные каналы или группы, а для кого‑то это платформа для предоставления различных услуг. Очень часто, для создания своего стиля авторы используют смайлики и другие символы, а с появлением подписки Telegram‑премиум стало возможным создавать и добавлять свои собственные картинки.

Сегодня мы рассмотрим, как из обычного шрифта, сделать уникальный набор эмозди и добавить его в телеграм.

Ручное создание эмодзи

Это несложно сделать руками, когда у нас один или два новых кастомных смайлика. Но очень часто для оформления постов применяются эмодзи‑буквы и знаки препинания, а это уже минимум(если говорить про русский язык) 33 символа. Так что будем автоматизировать.

Создаём набор изображений с буквами

Итак, нам необходимо сгенерировать набор из 33 картинок, каждая из которых — буква, на прозрачном фоне, написаная определённым шрифтом и определённого цвета. Самое сложное — было найти какой‑нибудь прикольный шрифт, но в одном телеграм‑канале я смог найти несколько прикольных. Для создания картинок будем использовать библиотеку PIL.

Для начала установим её, зафиксировав версию, потому что в более новой — отсутствуют необходимые нам методы.

pip install pillow==9.5.0

А затем напишем небольшую функцию, которая и создаст наш набор картинок

from PIL import Image, ImageDraw, ImageFont import os def generate_all_alphabet(font_name, alphabet, color=(0, 0, 255, 255)): output_dir_name = f»» try: os.makedirs(output_dir_name) except FileExistsError: pass fontsize = None font = None for letter in alphabet: img = Image.new(‘RGBA’, (100, 100), (0, 0, 0, 0)) draw = ImageDraw.Draw(img) if not fontsize or font: fontsize = 1 font = ImageFont.truetype(font_name, fontsize) while font.getsize(letter)[0] < img.size[0] * 0.9 and font.getsize(letter)[1] < img.size[1] * 0.9: fontsize += 1 font = ImageFont.truetype(font_name, fontsize) fontsize -= 1 font = ImageFont.truetype(font_name, fontsize) letter_width, letter_height = font.getsize(letter) position = ((img.width — letter_width) // 2, (img.height — letter_height) // 2) draw.text(position, letter, fill=color, font=font) img.save(f»/letter_.png», «PNG»)

Еще по теме:  Как объединить стикеры в Телеграмм в один стикерпак

Давайте разберём, что в ней происходит:

Снимок экрана 2023-09-20 в 23.56.54

  • В качестве параметров, в функцию поступают:
  • Путь к файлу шрифта — font_name
  • Список символов(букв и/или знаков препинания), из которые мы хотим сделать картинки — alphabet
  • Цвет, в который мы хотим окрасить по схеме RGBA, по умолчанию — синий — color
  • Сначала создаётся папка, в которой мы будем хранить наши картинки
  • Затем мы подбираем размер шрифта, банальным подбором: увеличиваем значение на единичку и проверяем, что буква влезает на наш холст, а в конце уменьшаем на единичку, на всякий случай
  • Пробегаясь по всем элементам мы помещаем в центр нашего холста нашу букву и сохраняем в файл
  • Теперь у нас есть картинки. Давайте отправим их в бота.

    Создаём эмодзи-пак

    Для автоматизации процесса будем использовать популярную библиотеку для создания юзерботов(боты симулирующие действия пользователя) — Pyrogram.

    Как и в предыдущем случае, напишем функцию, а затем рассмотрим её поподробнее:

    from pyrogram import Client from pyrogram.enums import ChatType from constants import emoji_alphabet def add_emoji_alphabet(font_name, api_id, api_hash, session_name): with Client(session_name, api_id, api_hash) as client: dialogs = client.get_dialogs() stickers_chat_id = None for dialog in dialogs: chat = dialog.chat if chat.type == ChatType.BOT and chat.username == «Stickers»: stickers_chat_id = chat.id break client.send_message(stickers_chat_id, «/start») client.send_message(stickers_chat_id, «/newemojipack») client.send_message(stickers_chat_id, «Статичные эмодзи») client.send_message(stickers_chat_id, font_name) for letter in emoji_alphabet.keys(): client.send_document(stickers_chat_id, f»/letter_.png») client.send_message(stickers_chat_id, emoji_alphabet[letter]) client.send_message(stickers_chat_id, «/publish») client.send_message(stickers_chat_id, «/skip») client.send_message(stickers_chat_id, font_name)

    Для начала, разберёмся, что это за emoji_alphabet . Как вы помните, для добавления нужно две вещи: картинка и базовый эмодзи. Так вот, это словарь, где ключом является буква алфавита, а значением — необходимый эмодзи. Большой плюс Python‑а в том, что он поддерживает эти символы и не нужно париться с их кодом. Вот так выглядит кусочек этого словаря:

    Еще по теме:  Спамер в ТГ группы онлайн

    emoji_alphabet =

    Теперь посмотрим, что происходит в функции:

    • Для начала мы подключаемся к нашему приложению, используя полученные ранее api_id и api_hash , в качестве session_name обычно используется какой-нибудь уникальный идентификатор, что бы потом, в свойствах Telegram его можно было легко заметить
    • Потом, ищем идентификатор нашего чата со стикерами
    • Потом отправляем целый набор команд и фраз:
    • /start — для перезапуска бота
    • /newemojipack — для запуска процесса создания нового пакета эмодзи
    • Статичные эмодзи — для выбора типа создаваемого пакета
    • font_name — для выбора имени нашего пакета
    • Сначала изображение с этой буквой
    • А затем «стандартный эмодзи»

    После перехода по этой ссылке — вы сможете использовать сгенерированные эмодзи

    Эмодзи-паки, созданные из двух разных шрифтов

    Теперь, вы можете создавать свои собственные эмодзи паки из любых шрифтов. Весь код доступен на GitHub.

    Источник: habr.com

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