Отправка большого количества данных base64 на сервер PHP

#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 в браузере может быть хорошим вариантом. Вам никогда не понадобится отправлять их на сервер.