#image #image-processing #png #imagemagick
#изображение #обработка изображений #png #imagemagick
Вопрос:
В моем приложении мне нужно изменить размер и ухудшить качество файлов PNG.
В полном размере PNG-файлы имеют размер 3100x4400px и занимают 2,20 МБ дискового пространства.
При выполнении следующей команды:
convert -resize 1400 -quality 10 input.png output.png
изображения изменены до 1400×2000, используя 5,33 МБ дискового пространства.
Итак, мой вопрос: как я могу уменьшить размер файла?
Комментарии:
1. Вы можете изменять размер, пока не получите достаточно маленький размер файла. Вы можете ограничить количество цветов и сохранить как палитру 8-битного цвета. (см imagemagick.org/script/command-line-options.php#colors и imagemagick.org/Usage/formats/#png_formats ). Вы можете постеризировать цвета. Вы можете использовать различные типы / значения сжатия (см. imagemagick.org/script/command-line-options.php#quality ), хотя это, скорее всего, не будет иметь большого значения.
Ответ №1:
- Вы можете еще больше снизить качество PNG, используя постеризацию:
https://github.com/pornel/mediancut-posterizer (Графический интерфейс Mac)
Это операция с потерями, которая позволяет zlib лучше сжимать.
- Преобразуйте изображение в PNG8 с помощью pngquant.
Это уменьшает изображения до 256 цветов, поэтому качество зависит от типа изображения, но pngquant создает очень хорошие палитры, поэтому вы можете быть удивлены, как часто это работает.
- Используйте Zopfli-png или AdvPNG для лучшего повторного сжатия изображений.
Это без потерь и рекомендуется для всех изображений, если у вас есть свободные циклы процессора.
Комментарии:
1. Вы также можете использовать
convert source.png png8:dest.png
для преобразования в PNG82. Конвертер ImageMagick довольно плох и не поддерживает прозрачность должным образом: imagemagick.org/discourse-server/viewtopic.php?t=23340
3. есть ли какой-либо способ сгенерировать png с определенным ограничением размера файла, например jpg -определить jpeg: extent = 70 КБ
4. Нет, PNG в целом не подходит для сжатия для определенного размера файла, поэтому единственное, что вы можете сделать, это сжать несколько раз с разными настройками и выбрать один из результатов, наиболее близкий к желаемому размеру. Но сжатие до фиксированного размера файла в большинстве случаев является очень плохой идеей , поскольку это приведет к слишком плохому качеству сложных файлов и потере места на простых изображениях.
Ответ №2:
После использования imagemagick
для изменения размера вы можете сжать изображение с помощью pngquant
.
На Mac (с homebrew) brew install pngquant
затем:
pngquant <filename.png>
Это создаст новое изображение filename-fs8.png
, которое обычно намного меньше по размеру.
Ответ №3:
На странице справки говорится, что -quality
опция, используемая с PNG, устанавливает уровень сжатия для zlib, где (примерно) 0 — худшее сжатие, 100 — лучшее (по умолчанию 75). Поэтому попробуйте установить -quality
значение 100 или даже удалить эту опцию.
Другой метод заключается в определении PNG:compression-level=N
PNG:compression-strategy=N
и PNG:compression-filter=N
достижении еще лучших результатов.
http://www.imagemagick.org/script/command-line-options.php#quality
Ответ №4:
Для ленивых людей, которые прибыли сюда, желая вставить однострочный:
mogrify -resize 50% -quality 50 *.png amp;amp; pngquant *.png --ext .png --force
Это изменяет все png в текущем каталоге на месте, поэтому убедитесь, что у вас есть резервная копия. Измените размер и параметры качества в соответствии с вашими потребностями. Я провел быстрый эксперимент и сначала mogrify, а затем pngquant, что привело к значительному уменьшению размера изображения.
Пакет ubuntu для pngquant называется «pngquant», но я установил его уже на 20.04LTS, поэтому кажется, что он может быть там по умолчанию.
Комментарии:
1. Отлично. Также работал как шарм на компьютере Mac. Я просто использовал немного больше качества, так как 50% — это слишком много. в любом случае, любой может играть со своими.
Ответ №5:
Я обнаружил, что лучшим способом было использовать
- density [value]
параметр.