Сжатие изображений в формате GIF в PHP? - PullRequest
5 голосов
/ 14 сентября 2010

Как можно сжать файл изображения GIF в PHP5?

Я знаю, что с JPG можно делать вот так imagejpeg ($ resource, $ filename, $ quality) согласно http://us.php.net/manual/en/function.imagejpeg.php

Ответы [ 3 ]

6 голосов
/ 26 августа 2013

GIF-файлы, безусловно, с потерями, и вы абсолютно можете сжать их - довольно значительно. Вот код PHP:

$img = imagecreatefromstring(file_get_contents($_FILES["my_field"]["tmp_name"]));
imagetruecolortopalette($img, false, 16);  //  compress to 16 colors in gif palette (change 16 to anything between 1-256)
imagegif($img, $destination_filename);  //  $destination_filename is the location on your server where you want to save the compressed gif file

Спасибо Марио, по этой ссылке для первой строки выше: Конвертировать изображение JPG / GIF в PNG в PHP?

Многие люди утверждают, что гифки без потерь, что не правильно. Гифки наверняка могут потерять данные. Потеря происходит в точке сохранения, а не в точке открытия файла, а потеря gif ведет себя иначе, чем потеря jpegs, из-за чего люди запутываются. Немного рассудка также скажет, что почти КАЖДЫЙ тип изображения, который не является растровым изображением, действительно имеет потери, иначе мы можем просто использовать растровое изображение. Помимо этого базового понимания, сжатие изображений не является точной наукой, которую продвигают все эти опытные «блоггеры», и программисты преуспеют в изучении форматов данных и алгоритмов сжатия в глубине (как каламбур) и самостоятельно.

Эта статья http://searchcio -midmarket.techtarget.com / Definition / lossless-and-lossy-сжатие категорически и ложно заявляет, что "Файл обмена графиками (GIF) является Формат изображения, используемый в Интернете, который обеспечивает сжатие без потерь ". Это все равно что сказать "все прямоугольники - это квадраты". Некоторые прямоугольники, безусловно, являются квадратами, но, по логике, утверждение на 100% неверно. Если у вас есть черно-белое изображение, вы, безусловно, можете обойтись без изображения GIF без потерь, но GIF отнюдь не "без потерь". Кроме того, сохранение файла JPEG в 100% качестве также без потерь, но может создать файл большего размера, чем оригинал.

Как ОЧЕНЬ упрощенное правило: для высокоскоростной передачи используйте GIF-файлы с небольшими палитрами для высококонтрастных изображений (например, изображение черного блокнота на белом столе); используйте JPEG между 50% -70% на изображениях с очень низкой контрастностью (например, изображение леса); и используйте GIF-файлы с большими палитрами или JPEG-изображениями с качеством 63% -85% на изображениях со средней или смешанной контрастностью (например, изображения вас и ваших друзей).

Сжатие LZW (для файлов Tiff) удивительно, но имейте в виду, что можно сжать изображение и получить словарь перевода, который, помимо самих данных сжатия, больше исходного изображения. Сжатие изображений очень сложное и не подходит под любой размер, поэтому избегайте общих выражений при обсуждении сжатия изображений. Нет такой вещи, как «правильный» вариант, только лучшие варианты.

6 голосов
/ 14 сентября 2010

JPG - сжатие с потерями. Это означает, что вы можете использовать «параметр качества» для настройки соотношения размер / качество.

GIF - сжатие без потерь, вы не можете получить лучшее сжатие, регулируя качество.

Для создания GIF-изображения используйте imagegif (...)
http://us.php.net/manual/en/function.imagegif.php

0 голосов
/ 14 сентября 2010

Если вы хотите открыть изображение GIF, посмотрите на функцию imagecreatefromgif: http://www.php.net/manual/en/function.imagecreatefromgif.php

Результат может быть передан в imagejpeg для сохранения в формате JPEG. В зависимости от изображения это может быть бессмысленно.

...