уменьшить все изображения в zip до исправляемого состояния (КБ) с помощью Imagemagick convert

#ffmpeg #imagemagick #compression #imagemagick-convert

#ffmpeg #imagemagick #сжатие #imagemagick-преобразовать

Вопрос:

Я использую Imagemagick, мне интересно, как я могу уменьшить внутри zip все, например, jpg изображения внутри и изменить их размер под 40K .

До сих пор я пытался

согласно :

https://gist.github.com/rkbhochalya/d3557a9d122ab547c040af3adbd565c2

  find . -name "*.jpg" -exec convert -define jpeg:extent=40kb "{}" -sampling-factor 4:2:0 -strip -colors 16 -depth 8  -define jpeg:extent=38kb "{}" ; -exec echo "{}" ;
  

но это только уменьшает скорость передачи данных и цвета до 16, что нормально, но недостаточно.

пробовал magick mogrify -strip -colors 16 -depth 8 -quality 90 assets/*.jpg

но все же мне нужно уменьшить каждое изображение до 40 КБ

введите описание изображения здесь

Спасибо,

Комментарии:

1. 40 КБ — это довольно мало. Если размеры вашего файла слишком велики, вы никогда не получите такого низкого качества даже при качестве 1. Но вы можете попробовать использовать -define jpeg:extent={size}. Смотрите imagemagick.org/Usage/formats/#jpg_write . Или уменьшите значение качества, пока не достигнете 40 КБ, если сможете. Я не думаю, что Imagemagick будет обрабатывать внутри zip-файлов.

2. @fmw42, смотрите мой вопрос, это то, что я used…it не сработало. это работает только с определенным файлом. мне нужны все файлы внутри папки. Я почти уверен, что у меня ошибка в синтаксисе. Кстати, 40 Тыс. — это спрос на рекламный сервер Google

3. Опубликуйте один из ваших файлов JPG, чтобы я мог протестировать. Какова ширина и высота вашего изображения? Какая у вас версия и платформа для обмена мгновенными сообщениями и какая у вас версия libjpeg? Почему у вас есть -определите jpeg: extent дважды. Его следует использовать только после чтения из входного файла и перед записью выходного файла. При использовании -colors вы должны добавить dither перед этим, чтобы отключить сглаживание, которое создаст новые цвета.

4. @ fmw42, эта команда работает. конвертировать ~/ Desktop /test123.png dither -цвета 16 -качество 85% -палитра типов -глубина 8 -определить jpeg: extent = 40 КБ out.png , но мне нужно запустить его рекурсивно для всех файлов в папке, у вас есть идея …?

Ответ №1:

Попробуйте использовать mogrify вместо convert. Он обработает все изображения в каталоге. Смотрите https://imagemagick.org/Usage/basics/#mogrify .

Но вы никогда не получите такую команду, чтобы получить размер файла 40K для PNG, если только ваши размеры не очень малы. Попробуйте сохранить в формате JPG. Определение размера JPEG работает только для сохранения в JPG.

Итак, для сохранения в формате JPG, если у меня есть мои изображения на рабочем столе в папке test1 и я хочу сохранить в папке test2 на рабочем столе, я бы сделал

 cd
cd desktop/test1
mogrify -path ../test2 -format jpg -strip -depth 8 -define jpeg:extent=40kb *
  

Если вы действительно хотите сохранить в формате PNG, лучшее, что вы могли бы сделать, это (или еще больше уменьшить цвета)

 cd
cd desktop/test1
mogrify -path ../test2 -format png -strip  dither -colors 16 -type palette -depth 8 *
  

Но если ваши изображения не имеют очень маленькой ширины и высоты, ни одно из них не уменьшится до 40 КБ. Вы могли бы попробовать добавить -quality, но значения качества для PNG отличаются от JPG. Смотрите https://imagemagick.org/script/command-line-options.php#quality

Я думаю, что сохранение в формате JPG даст вам наилучшие шансы.

Комментарии:

1. @ fmw42, добавлено к скриншоту вопроса , оно работает частично, при расширении PNG оно успешно уменьшается до 40 КБ, но при использовании JPEG оно не уменьшается до 40 КБ. Я пытался изменить расширение на PNG, но все равно это не работает. Я могу поделиться своими изображениями в качестве примера 🙂

2. Это было то же самое изображение, которое успешно конвертировалось в PNG, но не в JPG? Разместите ссылку на пример изображения, которое не конвертируется в JPG размером менее 40 КБ с помощью моей команды выше. Обратите внимание, что в соответствии с моими примерами выше, вам нужны две разные команды, одна для вывода в формате JPG и одна для вывода в формате PNG.

3. поделился общедоступной ссылкой — нужно запустить рекурсивно и уменьшить до 40 КБ, все работает, кроме jpg :):) drive.google.com/open?id=1W07pQFfvH3kGsW_5zAnjpQzW3jCvE-FO

4. Все ваши изображения, преобразованные в формат JPG размером 40 КБ или меньше, за исключением 17_Glasses_NoHat_v04.jpg . Причина в том, что его ширина и высота слишком велики, т. Е. слишком много пикселей. Обработка пыталась использовать качество 1, которое является настолько низким, насколько это возможно, но с качеством 1 оно по-прежнему превышает 40 КБ. Обратите внимание, что я забыл добавить -strip к своим командам в моем сообщении. Я отредактировал его. Но это все равно не помогает этому одному изображению. Я выполнил другую команду для сохранения в формате PNG, но все изображения, кроме одного, были больше 40 КБ. Единственный способ сделать все ваши файлы меньше 40 КБ — уменьшить размеры файла и сохранить в формате JPG

5. именно то, что я говорю на экране печати, все хорошо, кроме 1. может быть, преобразовать его в другой формат? Кстати, я использовал другой онлайн-инструмент под названием compress-or-die.com , и это удалось уменьшить ниже 40 КБ !! … что вы предлагаете? =]