Ако имате достатъчно изображения в компютъра си и те заемат твърде много място, определено е възможно да намалите размера им, дори без да губите качество. Това може да бъде много полезно и при качване на изображения в облачно хранилище.
JPEG и PNG са най-разпространените формати на изображения в интернет, така че ще можете да оптимизирате почти всички изображения
Съществува програма, наречена jpegoptim, инструмент от командния ред, който може да се използва за компресиране на изображения JPEG, JPG и JFIF без загуба на качество. Помощната програма оптимизира изображенията въз основа на таблици на Хъфман. Алгоритъмът JPEG използва компресия в сегашния си вид, но тази компресия се постига с помощта на загуба на качество, а тук можем да оптимизираме размера, без да променяме изображението.
За да инсталирате помощната програма в Ubuntu, Debian и базираните на тях дистрибуции, изпълнете:
$ sudo apt install jpegoptim
Във Fedora, Red Hat, CentOS и други дистрибуции, базирани на тях, нещата са малко по-сложни, първо ще трябва да добавите хранилището epel-release. Можете да направите това с помощта на следната команда:
$ sudo yum install epel-release
Или:
$ sudo dnf install epel-release
След това можете да инсталирате jpegoptim от току-що добавеното хранилище:
$ sudo yum install jpegoptim
Или:
$ sudo dnf install jpegoptim
Нека разгледаме как да използваме jpegoptim. Използването на помощната програма за компресиране на изображения в Linux е много лесно. Всичко, което трябва да направите, е да стартирате програмата и да ѝ подадете име на файл. Това е синтаксисът:
$ jpegoptim optiona file_name.jpeg
Нека разгледаме опциите на програмата:
-d - посочете папката, в която да се запишат готовите изображения;-f - принудителна оптимизация;-m - показател за качество, отменя компресията без загуби и задава ниво на качество от 0 до 100, като колкото повече, толкова по-добре;-n - не извършва истинска оптимизация, а само показва резултата;-S - задава размера на готовото изображение, може да бъде зададен в проценти или килобайти;-o - заменя изходния файл;-p - запазване на времеви маркери;-P - запазване на правата върху файла.Нека да видим как да оптимизираме изображения в Linux с jpegoptim. Първо, нека разгледаме първоначалния размер:
$ du image.jpg

След това ще направим най-простата оптимизация:
$ jpegoptim image.jpg

След това отново разглеждаме размера:
$ du image.jpg

Както можете да видите, компресията на jpg е сработила и при отваряне на изображението в която и да е графична програма няма да има разлика или влошаване на качеството, оригиналното и готовото изображение ще бъдат идентични. Вляво е оптимизираното изображение, а вдясно е оригиналът:

Ако искате, можете да компресирате изображението до определен размер, но тогава то няма да е без загуби:
$ jpegoptim --size=250k image.jpeg
Изображението ще бъде компресирано, но качеството му ще се влоши значително. Ако има много изображения, можете много лесно да използвате пакетно компресиране, просто отидете в папката с изображенията и след това стартирайте командата за компресиране, като посочите маска вместо файл, например:
$ cd images/
jpegoptim *.jpg

Можете също така да включите повече от едно изображение едновременно:
$ jpegoptim image1.jpg image2.jpg
За да оптимизирате всички изображения в определена папка, можете да използвате командата xargs заедно с find. Например, компресирайте всички изображения в текущата папка с преместване в папката ~/compressed:
$ find . -name "*.jpg" | xargs jpegoptim -d ~/compressed -p
Това е всичко, сега знаете как да компресирате jpg изображения в Linux. По-нататък ще говорим за това как да компресираме png. Това също е много просто.
PNG или Portable Network Graphics е формат за растерни изображения, предназначен да замени несъвършения формат GIF по отношение на компресията и възпроизвеждането на цветовете. Размерът на PNG изображенията може да варира значително в зависимост от няколко фактора, като дълбочина на цветовете, преплитане, филтър преди компресирането, използван алгоритъм за компресиране и др.
OptiPNG е конзолна помощна програма, която ви позволява да оптимизирате PNG изображенията. А именно компресиране на размера, възстановяване на метаданни, проверка на целостта и т.н. С OptiPNG можете да компресирате файлове без загуба на качество, точно както направихме с формата Jpeg.
Ако използвате Ubuntu, програмата се намира в официалните хранилища и можете да я инсталирате много лесно. За да инсталирате optipng в Debian, Ubuntu и производни програми, въведете:
$ sudo apt install optipng
В Red Hat, CentOS или Fedora това става по абсолютно същия начин, само че с различен мениджър на пакети:
$ sudo yum install optipng
Или:
$ sudo dnf install optipng
Синтаксисът на помощната програма е много прост. Можете да я използвате по абсолютно същия начин като jpegoptim:
$ optipng ioptions file_name.png
Нека разгледаме опциите на програмата:
-backup - запазване на копия на модифицираните файлове;-dir - папка, в която да се записват файловете;-force - принудително записване на изходящ файл;-out - запис на изходящ файл в посочения файл;-simulate - не извършва никакви действия, а само показва резултата;-o - задава ниво на компресия от 0 до 7.Сега нека се опитаме да оптимизираме png в Linux. Първо нека видим размера на файла:
$ df -h image.png

За да извършите компресиране на изображението, използвайте следната команда:
$ optipng image.png
След това отново погледнете размера, в този пример разликите не се виждат, защото изображението е много малко, но при по-голям размер те ще са значителни:

И тук компресията png linux е без загуби, което означава, че ще получите абсолютно същото изображение, само че по-малко. Можете също така да определите нивото на компресия, то не влияе на качеството на картината, но пряко засяга времето за работа на програмата. Стойността може да бъде от 0 до 7 и колкото повече, толкова по-силна е компресията и толкова по-дълга ще бъде обработката:
$ optipng -o 7 impge.png

За групова обработка на изображения можете да използвате същия принцип, както при работата с jpeg:
$ cd images/
$ optipng *.png

Сега знаете как се извършва оптимизацията на изображения в Linux.