Как часть функциональности большого приложения, которое я создаю, мне нужно, чтобы мой пользователь мог взять анимированное GIF-изображение и извлечь каждый фрейм в свое собственное изображение, чтобы показать его пользователю.
Затем пользователь может выбрать любое из изображений Frame, которые затем будут сохранены и использованы в качестве неанимированного обложки на моем Анимированный GIF Player который функционирует подобно фильму, загружая изображение обложки при загрузке страницы и загружая и показывая только большой файл Анимированное изображение GIF после того, как пользователь нажал кнопку «Воспроизвести» на изображении обложки.
Моя цель — сделать это с помощью PHP, так как мое приложение будет выпущено в виде плагина WordPress, поэтому, если мне понадобится какое-нибудь модное программное обеспечение на стороне сервера, это может ограничить мою базу пользователей.
До сих пор лучшие результаты поиска PHP для этой задачи объединяли эту библиотеку под названием GifFrameExtractor который представляет собой один файл класса PHP. Я нашел более продвинутую / обновленную версию в этой Forked копии здесь https://github.com/AbhasKr/GifFrameExtractor
В библиотеке есть 1 вариант. Создавать прозрачную рамку или нет. Ниже я сделал демонстрацию, которая берет мой пример анимированного GIF-изображения и извлекает каждый фрейм в свой собственный файл изображения, используя обе версии (прозрачную и нет).
Ни один из двух наборов изображений, созданных с помощью библиотеки GifFrameExtractor, не отвечает моим требованиям к качеству.
Затем я нашел онлайн-сервис обработки облачных изображений, в который я загрузил образец GIF-изображения, и он генерирует идеальные кадры изображений, как мне нужно!
Служба http://cloudinary.com/
Я могу просмотреть каждый кадр моего анимированного GIF-файла, который я загрузил здесь, используя этот формат URL
http://res.cloudinary.com/apollo-web-studio/image/upload/pg_[FRAME_NUMBER_HERE]/Ladda-loader-buttons_qlpxbc.jpg
Заменить [FRAME_NUMBER_HERE] часть с номером кадра, и он покажет кадр в виде изображения.
демонстрация http://apollowebstudio.com/labs/gif_gen/demo.php
GitHub GIST Демо Исходный код: https://gist.github.com/jasondavis/ab7c71fc1a007c3a31282bb9791cecff
Раздвоенная библиотека GifFrameExtractor PHP используется: https://github.com/AbhasKr/GifFrameExtractor
Исходное тестовое анимированное GIF-изображение: Http: //localhost/labs/php/GifFrameExtractor/Ladda-loader-buttons.gif
Демонстрация демонстрирует 3 различных результата обработки от моей попытки взять анимированное GIF-изображение и извлечь каждый кадр в пригодное для использования изображение с помощью PHP
Столбцы 1 и 2
Использование библиотеки PHP GIFFrameExtractor, результаты которой не идеальны.
колонка 3
Я использовал облачный сервис для обработки изображений онлайн под названием cloudinary.com
Изображения, сгенерированные на Cloudinary.com, используют различные методы, так как каждый сгенерированный кадр безупречен!
Моя цель — генерировать изображения для каждого кадра и получать их, как результаты Cloudinary.com с использованием PHP. Мне нужна помощь, пожалуйста?
Возможно, вы захотите взглянуть на ImageMagick (который предоставляет библиотеку PHP) и, в частности, функциональность «объединить», которая создает полнокадровое изображение из каждого кадра анимации GIF (в отличие от только частичного содержимого кадра, указывающего на изменения по сравнению с предыдущим кадром). ).
Это можно использовать для создания «кинопленки» из анимированного GIF или в вашем случае извлечь отдельное полное изображение для каждого кадра анимированного GIF.
Ссылка здесь: http://www.imagemagick.org/Usage/anim_basics/#coalesce
Других решений пока нет …