Я ищу инструмент сжатия JPEG без потерь из командной строки, который будет иметь следующие функции:
Тоже не особо важно, было бы неплохо, если бы инструмент мог
Ответ Нику Уайлду:
Я не знаю, кому мне доверять: вам или людям из google, которые создали pageSpeed . Когда я запускаю этот jpeg через pageSpeed, он говорит
Сжатие без потерь httpS://upload.wikimedia.org/.../Lake_mapourika_NZ.jpeg может сэкономить 16,8 КБ (уменьшение на 4%).
PS причина использования инструмента не в том, чтобы сэкономить место на моем компьютере, изображения находятся на сервере, поэтому оптимизация изображений поможет сэкономить трафик для пользователей, просматривающих изображения. По этой причине изображения должны быть доступны для просмотра, и их архивирование невозможно.
После нескольких часов игры с bash я нашел способ, как это делает Google . Он использует одну из этих двух программ:
Оба они поддерживают преобразование без потерь и с потерями. Я попробовал второй, в Ubuntu как jpegoptim
.Чем делать то, что я хочу, я должен сделать следующее:
find MyDirectory/ -type d -exec sh -c '
ls "$0"/*.jpg 2>/dev/null && jpegoptim --strip-all -t "$0"/*.jpg
' {} \;
Это действительно близко к тому, что я хочу. Единственная проблема заключается в том, что я вижу много вывода о каждом сжатии файла, и я не могу избавиться от него с помощью -q, потому что он также избавляется от сводки. Но это самое близкое, что я смог получить с моими только что изученными «навыками» bash. Я задал дополнительный вопрос на Ask Ubuntu .
Это очень быстро. Обработка нескольких тысяч файлов заняла < 5 секунд.
ImageMagik convert
позволяет использовать командную строку, пакетную обработку и конвертирует ваши файлы в формате jpeg в jpeg2000, что может сэкономить вам место и имеет несколько других опций. Если вы сначала не сделали резервную копию, я бы рекомендовал не перезаписывать существующие файлы, пока вы не убедитесь, что преобразование работает, поскольку с любым инструментом что-то может пойти не так.
Обратите внимание, что отдельные jpeg-файлы zip или targz обычно приводят к увеличению размера, если вам нужно сэкономить место, тогда каталоги tar и tar имеют возможность --remove-files
удалять файлы по мере их добавления в архив. Хотя это не уменьшит размер файлов, вы будете тратить место только после одного файла, а не после каждого файла.
Для информации:
$ convert -list сжать
B44 B44A BZip DXT1 DXT3 DXT5 Fax Group4 JBIG1 JBIG2 JPEG JPEG2000 Lossless LosslessJPEG LZMA LZW Нет Piz Pxr24 RLE Zip RunlengthEncoded ZipS
convert -list format
. У меня есть JPEG2000 в параметрах сжатия, но не в форматах, и результат convert -compress jpeg2000 00001.tif 00001.pdf convert: delegate library support not built-in
00001.pdf' (JP2) @ error/pdf.c/WritePDFImage/1283.`jpeg:extent
, например, convert -define jpeg:extent=400KB
. imagemagick.org/discourse-server/viewtopic.php?t=15386convert
никогда не будет без потерь, если вы выводите в формат с потерями. поэтому эта часть не по теме.JPEG ЯВЛЯЕТСЯ форматом с потерями - они не могут быть сжаты с помощью сжатия JPEG без потерь. Так что нет инструмента, который может это сделать.
При этом, вероятно, существуют инструменты, которые могут оптимизировать изображения JPEG, то есть удалять ненужные данные, хотя это будет минимальной экономией размера.
Или другим методом может быть индивидуальное сжатие zip/7z/gzip (и т. д.) и удаление оригиналов.
Если требуется какой-либо из этих вариантов, отредактируйте или создайте новый вопрос.
Иззи
>/dev/null
в конец вашейjpegoptim
командной строки, чтобы перенаправить STDOUT на «нирвану данных». Потенциальные ошибки (и все остальное, отправленное в STDERR) по-прежнему будут отображаться.Сальвадор Дали
Иззи
| grep -v <not-this-keyword> | grep -v <this-neither> [...]
, который затем подавляет все строки, содержащие упомянутые ключевые слова.Жиль "ТАК - перестань быть злым"
Сальвадор Дали
Немо
find MyDirectory/ -name '*jpg' -print0 | xargs -0 jpegoptim -s -t
?Немо
jpegoptim
это здорово, и я часто использую его, он также поддерживает файлы JPEG 2000?Немо
out.jp2 [ERROR]
.Показать имя