Apple продолжает улучшать свою iOS, добавляя множество функций с течением времени, и то же самое относится к iOS 17. Apple внесла множество улучшений в Сообщения в iOS 16, а Apple расширила эти улучшения новыми функциями в iOS 17. Одной из таких функций iOS 17 являются живые стикеры. .
Вы можете задаться вопросом, насколько Live Stickers отличаются от обычных стикеров и лучше ли они. В этом руководстве я расскажу и покажу, как создавать живые стикеры в iOS 17 на iPhone.
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
- Что такое живые стикеры в iOS 17?
- Как сделать живые стикеры в iOS 17
- Где можно использовать живые стикеры?
Что такое живые стикеры в iOS 17?
Live Stickers позволяет коснуться и удерживать объект в Фото, чтобы превратить его в Live Sticker. iOS 16 добавила возможность поднять объект с фона на фотографии; iOS 17 использует ту же функцию для живых стикеров. Кроме того, вы можете создать анимированную наклейку с живым фото.
ТОП фишек iOS 16
Вы можете выбирать из различных эффектов, таких как «Блестящий», «Комический», «Пухлый» и «Контур», что позволяет персонализировать их.
Как сделать живые стикеры в iOS 17
Вы можете создавать живые стикеры из приложения «Сообщения» или приложения «Фотографии». Я покажу вам оба метода, чтобы вы могли использовать тот, который покажется вам проще.
Способ 1: приложение «Сообщения»
- Откройте беседу в приложении «Сообщения» на iPhone.
- Нажмите кнопку «Плюс» (+) слева от текстового поля → Выберите «Наклейки».
- Коснитесь параметра «Плюс» (+) на вкладке «Наклейки».
- Выберите фотографию, которую хотите преобразовать в живую наклейку → Нажмите «Добавить наклейку», чтобы добавить живую наклейку на вкладку «Наклейки».
Если вам не нужна анимированная версия стикера, коснитесь параметра Live в левом верхнем углу. - После этого вы можете получить к ним доступ из меню «Наклейки» под кнопкой «Плюс» (+) в «Сообщениях», чтобы отправить их своим контактам.
- Чтобы добавить эффекты, вы можете нажать и удерживать только что созданную наклейку и выбрать опцию «Добавить эффект» во всплывающем мини-окне.
- Выберите нужный эффект и нажмите «Готово», чтобы сохранить его.
Способ 2: приложение «Фотографии»
Крутая фишка с фотками в iOS 16 на айфоне.
- Запустите приложение «Фотографии» → Откройте фотографию, которую хотите использовать в качестве живой наклейки.
- Нажмите и удерживайте объект на изображении. Над предметом появится небольшое всплывающее меню, выберите «Добавить наклейку» во всплывающем окне, и оно превратится в наклейку.
Недавно созданная наклейка будет добавлена на вкладку «Наклейки».
Опять же, вы можете долго нажимать на вновь созданную наклейку и выбирать опцию «Добавить эффект» во всплывающем мини-окне, чтобы добавить эффекты. Выберите нужный эффект и нажмите «Готово», чтобы сохранить его.
Где можно использовать живые стикеры?
Очевидно, что вы можете использовать живые стикеры в приложении «Сообщения». Однако вы можете использовать его в сторонних приложениях, таких как Snapchat, фотографии, снимки экрана, PDF-файлы, электронные письма и многое другое. Поскольку Live Stickers доступны для всей системы, вы можете использовать их практически где угодно, при условии, что больше разработчиков сторонних приложений добавят их поддержку.
Кроме того, Live Stickers будут доступны на вашем Mac с macOS Sonoma или новее и на iPad с iPadOS 17 или новее, помимо вашего iPhone. И живые стикеры, которые вы создаете на своем iPhone, также будут синхронизироваться с другими вашими устройствами Apple.
Заключение
Живые стикеры на iOS 17 — это отличный способ создавать забавные стикеры с изображением кого угодно, включая домашних животных, любимых персонажей, друзей и т. д., чтобы разнообразить общение. Но вы можете использовать их в масштабах всей системы, а не только в разговорах. Дайте мне знать, если вы сделали что-то для себя в комментариях ниже.
- Как включить и использовать режим ожидания в iOS 17 на iPhone
- Как настроить персонализированные контактные постеры в iOS 17
- Как понизить бета-версию iOS 17 до iOS 16 без потери данных
Программы для Windows, мобильные приложения, игры — ВСЁ БЕСПЛАТНО, в нашем закрытом телеграмм канале — Подписывайтесь:)
Источник: autotak.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
Как сделать стикеры в Телеграмме из фото
Отсылать пользователям в Телеграмме можно не только текстовые и голосовые сообщения, но и стикеры (эмодзи). Они позволяют выразить свои эмоции без слов, а также стали использоваться для замены стандартных смайлов. В материале рассмотрим, как сделать из фото стикер в Телеграмме.
BeSticky – делаем стикер из фото в Телеге
Программное обеспечение также можно загрузить из Google Play Market и App Store:
- Открыть программу после установки с домашнего экрана.
- Дать приложению доступ к мультимедиа и внутренней памяти.
- Принять политику конфиденциальности и пользовательское соглашение.
- Чтобы сделать картинку, посередине экрана нажмите на кнопку «+».
- Выберите способ, как сделать стикер: загрузить фото из галереи устройства или камерой.
- С помощью маркера перемещайте фото, чтобы выбрать область обрезки.
- Вверху тапните «Обрезка», дождитесь завершения процесса и нажмите «Далее».
- Укажите размер изображения «512×512 pixel» и добавьте эффекты или надписи.
- Вверху активируйте настройку «Готово».
Важно! Чтобы экспортировать набор в Телеграмм, требуется нажать на кнопку «Экспорт» рядом с миниатюрой. Выберете вкладку «Telegram» и откроется мессенджер. На экране отобразится чат-бот, где надо тапнуть «Старт». Коснитесь «Добавить» и отметьте в галерее созданные картинки.
Источник: telega-blog.ru