Б-г, как это делается.Это звучит как простая операция, но есть ряд факторов, которые вы действительно хотите исправить, если собираетесь это сделать.В итоге получается несколько сотен строк кода, чтобы позаботиться обо всем.
Я рекомендую, хотя, возможно, вы захотите изменить размер изображения (которое требует повторного сжатия с потерями при использовании JPEG), преобразовав егов GIF это плохая идея.Вы не знаете, какой тип источника, поэтому делать это проблематично.
Вот мой рекомендуемый поток:
1) Измените размер изображения в выходной формат.Здесь вы также можете принудительно установить соотношение сторон обрезки, если хотите.
2) Определить режим исходного источника:
- 8-битный индекс (GIF / PNG8): Сохранить как PNG8 (формат, как правило, меньше, чем GIF).
- 16-24 бит: Сохранить как JPG.Качество зависит от вас, но 70% - это хорошая базовая линия.
- 32 бит (PNG24): сохраняйте как PNG24, заботясь о прозрачности.
Обратите внимание, это решениев значительной степени уничтожает любые «анимированные» GIF-файлы, но ... это то, что происходит, когда вы пытаетесь изменить размер анимированного GIF-файла.
Хотя ... Я также настоятельно рекомендую НЕ делать это как одностадийный процесс и удалятьоригинальные файлы.Это тот тип вещей, который вернется к вам позже.
В наши дни дисковое пространство дешевое ... гораздо лучше хранить оригиналы в высококачественном формате (даже с разрешением 2K x 2K)затем создайте сервис изображений, который будет обеспечивать необходимое разрешение / качество, и кешируйте результат.