А теперь о подробностях реализации.
Всё началось с дискуссии в чатике Telegram-разработчиков о грядущей фиче:
Мужик сказал — мужик сделал! Первый прототип на Pillow и svgwrite, разбирающий GIF’ку на пиксели и преобразующий их в векторные квадратики с предпросмотром в SVG, был написан за один выходной.
Веселье началось дальше…
JSON — открытый формат, говорили они.
Доселе с форматами в Telegram то и дело хитрили. Сделали поддержку GIF-анимаций — на самом деле они конвертируются в MP4-видео. Сделали поддержку стикеров — выгружаются они в PNG, но преобразуются в WebP. В этот раз всё честнее: что на входе, то и на выходе.
Для анимированных стикеров в Telegram используется не GIF, не видео, и даже не какой-нибудь устоявшийся формат векторной графики типа SVG или — упаси Ктулху! — Flash. В нём задействован новомодный формат, вышедший из-под крыла Airbnb — Lottie. Доселе он имел некоторую известность в среде мобильных разработчиков, но благодаря Telegram, возможно, обретёт бо́льшую популярность.
Как в Телеграмме найти GIF картинки на любую тематику?
По сути своей, файлы Lottie являются сериализованными в JSON проектами Adobe After Effects, по максимуму реализующими все возможности этой программы. С отображением, увы, всё не так радужно. Хотя готовых «официальных» реализаций библиотеки для рендеринга Lottie и много, как раз под покрываемые Telegram платформы: Android, iOS, Qt и Web — лишь часть из возможностей формата реализована во всех из них. В Telegram пошли ещё дальше и ограничили перечень поддерживаемых возможностей, а также «придумали» свой формат, который отличается от обычного Lottie всего лишь упаковкой в GZip и параметром «tgs»: 1 . Кажется, я знаю, где сейчас работает Денис Попов! 🙂
И если с документацией на библиотеки для разных платформ всё довольно неплохо, то найти хоть какое-то описание устройства формата, увы, не удалось — только JSON-схему в исходниках lottie-web. Пришлось попутно ковыряться в существующих анимациях, дабы понять общие концепции формата. Также обнаружились расхождения реальных файлов со схемой: в частности, в слоях типа 4, согласно схеме, вложенные объекты хранятся в свойстве «it» — однако в реальных файлах ключ называется «shapes» , а «it» не работает.
Выясненные нюансы формата:
- Файл состоит из слоёв. В отличие от GIF, здесь у каждого слоя может быть произвольное время начала и конца отображения. К слою можно (точнее, нужно) применять различные трансформации: масштабирование, повороты, изменение прозрачности и т.д. Слои могут быть даже трёхмерными (запрещено для Telegram).
- Слой состоит из «фигур» (shapes). Типов у них много, некоторе нельзя использовать в Telegram. На практике, чтобы слой отобразился, он должен включать три фигуры: контур (в готовых анимациях это обычно тип «sh» — кривые Безье; конвертер пока использует только тип «rc» — прямоугольники), заливка (тип «fl» ) и трансформация (тип «tr» ).
- Можно даже включать растровые элементы, создавать текстовые слои, устанавливать взаимосвязи параметров слоёв и фигур через выражения. Вся эта вкуснотища также запрещена в Telegram.
Казалось бы, это и не проблема вовсе? Даже простенький GZip неплохо справляется со сжатием вопиюще повторяющихся данных, и 1 МБ сырого JSON магическим образом превращается в пару десятков килобайт, которые спокойно пролезают в заявленное ограничение в 64 кБ. Не тут-то было!
Загружаю я, значит, пухленькую анимацию, которая спокойно отображается lottie-web, в Telegram — и тут вместо условно красивого пиксель-арта на меня смотрит статическое размазанное вот это:
Что такое?! А оказалось, на разжатые данные тоже есть явно не указанное ограничение в 1 МБ. Представитель команды Telegram оперативно подтвердил его и сообщил о грядущем поднятии лимита до 2 МБ.
Даже если эти проблемы решат — стикеры, выходящие за пределы 1 МБ несжатых данных и не содержащие трансформаций, окажутся недоступными для пользователей старых версий Telegram. Так что придётся, видимо, соблюдать ограничения и впредь.
Прозрачность — это важно
Pillow, наряду с OpenCV, можно назвать индустриальным стандартом для обработки изображений в Python. Мало того, он неплохо заточен и под особенности GIF: поддерживает индексированные цвета, даёт доступ к палитре. Поддерживает преобразование пиксельной карты в NumPy-массив, что важно для продуктивной обработки. Даже статистику по цветам собирает! Но обнаружились и минусы:
- Не нашлось задокументированного способа получить индекс прозрачного цвета. Пришлось в качестве временного решения подразумевать, что прозрачный цвет — самый распространённый, но в реальных GIF’ках это не всегда так.
- То же самое с задержкой между кадрами: Pillow отдаёт только сами кадры как последовательность изображений, без информации о задержках.
- Иногда некорректно накладываются частичные кадры.
Прозрачность, как оказалось, gif2numpy не поддерживает вообще: цвета сразу преобразуются в три канала с разрядностью в байт, без учёта разрядности и сохранения индексов цветов. Благо, модуль состоит из одного файла, так что не составило труда включить его в проект и доработать, зарезервировав под прозрачность цвет #FE00FE .
Проблему с частичными кадрами решить оказалось нетривиально. gif2numpy пытается накладывать такие кадры на предыдущий, однако не проверяет параметры наложения, из-за чего также не всегда выходит правильный результат. Дабы не возиться с флагами, добавлена предварительная обработка изображений с помощью gifsicle с ключом —unoptimize — он преобразует частичные кадры в полные. А заодно приводит их к использованию глобальной палитры, что устранило необходимость отдельным образом обрабатывать прозрачный цвет при использовании собственной палитры кадра.
Сожми меня сильнее
Квадратики — это хорошо, но с такими ограничениями нужно проявить больше фантазии, иначе в Telegram не «пролезают» даже миниатюрные GIF’ки.
Первым в ход пошло нечто похоже на RLE : соседние по горизонтали квадратики одного цвета объединяются в один прямоугольник.
Далее — черёд эксплуатации особенностей Lottie. Поскольку каждый слой имеет произвольное время начала и конца — можно применить технику, которая давным-давно используется видеокодеками, и отчасти в самом GIF: квадратики, которые остаются на одном месте в течение нескольких кадров, можно слить в один слой, во время отображения которого сменяется несколько других. Что и реализовано, пока только для пар соседних слоёв.
Планы по развитию
Идей, которые здесь можно применить, навалом:
- Распознавать одноцветные области любого размера. Можно разбивать их на набор прямоугольников, для чего есть неплохой алгоритм. Также целесообразно преобразовывать их в контур, но это омрачается необходимостью указывать все точки кривых Безье в Lottie — прямоугольниками в некоторых случаях может быть выгоднее.
- Распознавать движение. Техника, опять-таки, издревле применяющаяся в видеокодеках. Если один и тот же контур не меняет форму от кадра к кадру, но лишь координаты — стоит вместо дублирования на нескольких слоях поместить его на один слой с трансформацией.
- Распознавать «накрытие» одних областей другими. Пример:
. .O..O. . .OOOO. .
Ссылки
- Исходники. Местами страшные.
- Канал, на котором я выкладываю паки успешно сконвертированных GIF’ок.
Источник: habr.com
Гифки для Telegram – как отправлять GIF
Гифки – это занимательные картинки, в которых присутствует анимация. Можно даже назвать эти изображения мини-роликом, так как в среднем анимация может длиться 2-15 секунд.
Наверняка все активные пользователи интернета уже не раз сталкивались с картинками в формате GIF. Эти изображения могут носить разный характер, как познавательный, так и развлекательный. Одним из преимуществом данного формата является небольшой «вес», они не затрачивают такой объем трафика, как например видеоролик.
Гифки в Телеграмм: как отправлять
Отправить своему собеседнику GIF изображение можно несколькими способами. Первый вариант – это отправка как обычный файл, но для этого нужно иметь нужную гифку в памяти своего устройства. Разработчики Телеграмма решили немного упростить жизнь активных пользователей, теперь вы можете отправить GIF при помощи обычного поиска и вставки.
Еще совсем недавно данная операция была доступна только на смартфонах с операционной системой iOS, но сейчас эта функция доступна и на Андроидах.
Для того чтобы совершить данное действие достаточно следовать следующим подсказкам:
- Во время переписки следует нажать на значок в виде скрепки;
- Далее следует выбрать пункт «галерея», а затем «поиск GIF»;
- Теперь вам остается только ввести название нужной гифки, поисковая система предложит вам несколько самых популярных вариантов;
- Выберите понравившийся вам GIF и нажмите на него.
Все ранее использованные вами GIF изображения будут сразу же высвечиваться после нажатия графы «поиск GIF».
Представленный формат общения может прекрасно дополнить вашу переписку и поможет в выражении чувств.
Источник: telegram-pro.ru
Как отправлять, сохранять и создавать гифки в Телеграмм
*.gif – это формат файлов, которые представляют собой двигающиеся анимации. Гифки добавляют сообщениям яркости и красочности. Их можно использовать как альтернативу смайликам и стикерам. В мессенджере Телеграмм есть инструмент, который позволяет использовать такие файлы. Ниже мы расскажем, как именно в приложении отправлять и сохранять гифки.
Как отправлять гифки в Телеграмм
Gif-анимации доступны во всех существующих версиях приложения: и в мобильных, и в десктопной. Алгоритм действий в обоих случаях схож, однако есть некоторые различия.
Важно! В Telegram формат *.gif сжимается по размеру и преобразуется в *.mpeg4. Это применяется для того, чтобы увеличить скорость отправления сообщения и уменьшить объем затрачиваемого трафика.
На смартфоне
В мобильных приложениях с ОС iOS и Android отправить СМС с гифкой можно следующим образом:
- Запускаем мессенджер.
- Выбираем уже существующий диалог или создаем новый.
- В окне набора сообщения жмем на символ скрепки.
- Выбираем из галереи нужную гифку.
- Нажимаем на стрелочку для отправления файла.
- Дожидаемся конца загрузки.
Готово, гифка отправлена!
На компьютере
Похожие действия для отправки гифок нужно выполнить в версии ТГ для компьютера:
- Открываем программу.
- Переходим к диалогу.
- Нажимаем на скрепку в окне набор нового СМС.
- Выбираем из памяти устройства файл и отправляем его.
Готово! Ваша-гиф анимация отправлена собеседнику.
Видео
Как сохранять гифки из Телеграмма
В Telegram можно не только отправить гиф-анимации, но и сохранить полученные в сообщениях. Эта функция также присутствует во всех модификациях мессенджера.
На смартфоне
Для сохранения гиф-анимаций на смартфоне есть два способа:
- Автоматическое сохранение;
- Отправка в Избранное.
Автоматическое сохранение
В первом случае достаточно нажать на стрелочку начала загрузки, которая расположена по центру гифки. Она начнет проигрывание файла, а также скопирует его в память устройства.
Отправка в Избранное
Второй путь включает три действия:
- Нажать на три точки на гифки, чтобы открыть ее меню.
- Выбрать пункт «Переслать».
- Отправить сообщение в диалог Избранного.
В этом разделе хранятся файлы и сообщения, которые видите только вы. Сохраненную в нем гифку вы можете просмотреть в любой момент.
На ПК
В версии для компьютера действуем похожим образом:
- Либо пересылаем в Избранное (действия аналогичны мобильной версии);
- Либо сохраняем файл сами:
- Кликаем на гифку правой клавишей мыши.
- В списке выбираем «Save file as».
- Выбираем место хранения и подтверждаем действие.
Готово, анимация сохранена в памяти вашего компьютера.
Как искать гифки в Телеграмме
В сообщениях вы можете отправлять не только те файлы, которые есть на смартфоне или ПК. Встроенный бот предлагает поиск по гиф-файлам в режиме онлайн. Воспользоваться им можно так:
Как создать гифку
При желании в Телеграм очень легко создать собственную гифку. Ход действий следующий:
- Открываем диалог и выбираем пункт «Видео».
- Выбираем из галереи короткое видео или записываем ролик онлайн.
- После завершения записи откроется окно, в котором необходимо отметить кнопку отключения звука «Mute», также вы можете уменьшить количество кадров с помощью ползунка. Когда все будет готово жмите Отправить.
- Телеграм преобразует видео в зацикленную gif-анимацию и добавит ее диалог.
Готово, вы сами создали и отправили гифку!
Видео
Телеграмм – это мессенджер, который позволяет отправлять файлы любых форматов. В том числе – gif-анимации. Функция доступна во всех версиях приложения. Кроме того, Telegram позволяет сохранять полученные гифки в разделе Избранное или в памяти устройства. Также каждый пользователь может создать собственную гифку.
Рекомендуемые сервисы для Telegram:
- Godlikes — Качественные подписчики по специальной цене! Стоимость 1-го подписчика всего 5,5 рубля! ⚡️ 5 дней контроля отписок!
- Morelikes — Накрутка просмотров: 128 руб. за 100 шт., подписчиков: боты от 0.74 руб , живые подписчики от 3.36 руб. за 1 шт.
- Bosslike.ru — ⚡️⚡️⚡️ Бесплатные подписчики и просмотры ⚡️⚡️⚡️
- Mrpopular — подписчики от 0.14 руб ⚡️; просмотры от 0.09 руб ⚡️
Источник: telegrammix.ru