#php #gif
#php #gif
Вопрос:
Во-первых, английский не является моим основным языком, извините за мою грамматику :).
Что я хочу сделать?
Я хотел добавить анимированную gif-отправку на свой веб-сайт. Размер Gif также необходимо изменить на несколько размеров.
Что я сделал?
После того, как я понял, что разделение gif на фреймы и их изменение — дорогостоящий код для PHP (изменение размера gif размером 3 МБ с 52 кадрами в 2 разных размера с помощью библиотеки imagick занимает около 13 секунд); Я изменил свой путь и попытался выполнить задание по разделению и изменению размера на стороне браузера / клиента и преобразовать эти измененные размерыв файлы формата jpeg base64, и я преуспеваю (кадры в буфер массива -буфер массива в холст-холст в base64. Изменение размера gif размером 3 МБ на 52 кадра до 2 размеров занимает 2-3 секунды). Теперь я отправлял много данных base64 на сервер.
Тогда первым делом я ищу библиотеку для повторного соединения этих фреймов на стороне сервера. (повторное присоединение фреймов на стороне сервера для предотвращения любых уязвимостей в системе безопасности, повторное присоединение к ним приведет к повреждению кодов взлома во фреймах, если таковой имеется.)
Я нашел библиотеку GifAnim, которая работает действительно хорошо и обновляется.
Все хорошо! 13 секунд изменения размера анимированного gif на стороне сервера заняли 2-3 секунды на клиенте и 1 секунду на стороне сервера!
Но я начал думать: «Может быть, лучше, если я отправлю файловый объект вместо кода base64 для фреймов?» потому что отправка 104 кода изображения base64 на сервер (52 кадра и 2 разных размера) выглядела слишком большой для меня. Также мне нужно base64_decode() -> imagecreatefromstring() все эти 104 изображения base 64, чтобы использовать их в качестве изображения.
Вопрос: Было бы лучше, если бы я превратил base64 в файловый объект и отправил на сервер файловые объекты вместо кодов изображений base64? Насколько хороша / стабильна функция base64_decode()? Потому что декодирование 100-150 изображений выглядело для меня настолько неестественным.
Спасибо за ваши советы!
Комментарии:
1. кодирование файла в base64 почти всегда приводит к увеличению полезной нагрузки. Отправка двоичных данных, особенно данных изображений, будет довольно оптимальной.
2. Почему вы отправляете данные base64 вместо двоичного файла изображения? Похоже, что нет никакого преимущества.
3. Спасибо! Пока я пытался изменить размер gif-фреймов на стороне клиента, я понял, что самый быстрый способ сделать это — создать HTML-холсты. Это действительно быстрый способ изменить их размер с помощью canvas. Я узнал, что вы не можете напрямую превращать холсты в двоичный файл изображения, вам нужно использовать convert base64 для каждого холста, а затем вы можете превратить их в файл. Я не хотел создавать новую полезную нагрузку для браузера, а также ограничение количества загружаемых файлов PHP препятствовало отправке более 100 изображений на сервер, по умолчанию 20. Для меня это нормально, но у меня есть клиент, который использует мою систему на дешевых хостингах. Отправка данных base64 в обход ограничения загрузки.
4. @techn9ne Вы определенно можете получить двоичные изображения из своего холста. И почему бы клиенту не создать GIF, пока он на нем?
5. Посмотрите, что @Brad также упомянул. Создание GIF в браузере может быть хорошим вариантом. Вам никогда не понадобится отправлять их на сервер.