Как сжать картинку и не сойти с ума.

Spoiler: Если вам нужно лишь однажды сжать какое-то JPEG изображение, то смело открывайте Google/Yandex и набирайте "сжать jpg онлайн".

https://pikabu.ru/story/vse_myi_nemnogo_muzyikantyi_7281912

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

Все аналоги с GUI интерфейсом обычно либо просто зарабатывают деньги на бесплатных библиотеках выдавая за "ноу-хау", либо делают всё то, что можно сделать "руками" (при желании).


Сжать jpeg

Есть разные интересные способы сжать jpeg, но я подобрал интересную утилиту, которая проста в использовании и устанавливается через brew. Называется jpegoptim.

$ brew install jpegoptim
$ jpegoptim [-keys] filename.jpg

Без параметров сжимает файл без потерь на сколько возможно, удаляет мета-информацию и в общем-то всё.

!Важно! Перезаписывает текущий файл на сжатый. К счастью, это поведение можно поменять.

С ключами сжимает отлично, главное подобрать нужные параметры. Несколько сценариев использования:

# Сжимает файл до 60 единиц качества (ключ -m от 0 до 100) и не перезаписывает (ключ -n)
jpegoptim -n -m 60 file.jpg
# Сжимает файл до 50% (ключ -S) и перезаписывает его
jpegoptim -S 50% file.jpg
# Сжимает файл до 50% и кладёт сжатый в папку (ключ -d)
jpegoptim -S 50% file.jpg -d compressed/

Более детальные настройки можно посмотреть в man jpegoptim, а короткую инструкцию с помощью tldr jpegoptim.

Пример работы jpegoptim
Оригинальное фото слева, сжатое справа. Размер сократился в два раза без видимых глазу искажений.

Как сжать png?

PNG сжать тоже можно прямо в терминале, можно даже сжать сразу все .png файлы в каталоге. Сразу пример:

$ brew install optipng
$ optipng *.png

Детальные настройки можно посмотреть с помощью man или просто воспользоваться tldr.


Как объединить изображения в pdf?

Очень просто.

$ brew install imagemagick
$ convert file1.jpg file2.png file3.gif output.pdf

Ещё, с помощью imagemagick можно jpg превратить в png.

$ convert image.jpg image.png

The End. Chisa.