Аптымізацыя малюнкаў у Linux

  1. Пошук і аналіз аднолькавых малюнкаў
  2. Хуткасць аптымізацыі малюнкаў
  3. Аптымізацыя малюнкаў з Lepton
  4. Аптымізацыя малюнкаў з FLIF
  5. стварэнне эскізаў
  6. Больш шырокае ўкараненне FLIF

Пры ўсёй папулярнасці хмарнага захоўвання, многія карыстальнікі Linux трымаюць бібліятэкі малюнкаў на сваіх жорсткіх дысках - а потым ламаюць галаву, як аптымізаваць занятае імі месца. На нашым уроку мы бярэмся за велізарную бібліятэку фатаграфій, якая расла не адзін год - ідэальная задача для адміністратараў сервера, якія займаюцца падтрымкай велізарнай колькасці дадзеных карыстальніка, ці каму там яшчэ трэба захоўваць кучу малюнкаў.

Мы пакажам, як вызваліць месца без шкоды для якасці малюнка, і раскажам, як з камфортам і выгодай праглядаць вашу новую аптымізаваную бібліятэку малюнкаў. Мы разгледзім спосабы выдалення дублікатаў файлаў з дапамогай простых надзейных інструментаў, затым выцісніце дадатковыя біты з існуючых файлаў JPEG і PNG і, нарэшце, смела канвертуючы нашы выявы ў некалькі фарматаў наступнага пакалення.

Перш чым пагрузіцца ў хвалюючы свет новых тэхналогій, давайце ўспомнім больш брутальны, але вельмі эфектыўны спосаб прымусіць вашыя файлы сціснуцца. Скажам, у вас ёсць некалькі малюнкаў PNG, і вы хочаце паменшыць іх вагу. Можна трохі паменшыць іх маштаб і зноўку іх сціснуць у рэжыме JPEG з стратамі, і яны ўсё роўна будуць нядрэнна выглядаць на экране:

$ Mogrify - path. - resize 70 x 70% - quality 75 - format jpg *. png

Гэты прыклад выкарыстоўвае mogrify з пакета ImageMagick, які даступны амаль ва ўсіх дыстрыбутывах Linux. Вы даеце яму ўказанне знізіць памер усіх PNG файлаў у каталогу з да 70% і канвертаваць іх у JPEG з выкарыстаннем кампрэсіі 75%. Такі асноўны падыход, і ён працуе толькі калі вы можаце дазволіць сабе трохі страціць у якасці малюнка. Калі вас гэта не прываблівае, чытайце далей, вы знойдзеце выдатныя парады па чараўніцтве без страт!

РЭКАМЕНДУЕМ: Самыя лёгкія дыстрыбутывы Linux

Пошук і аналіз аднолькавых малюнкаў

Аднолькавыя файлы малюнкаў часта з'яўляюцца вынікам капіявання фота з вонкавага носьбіта на жорсткі дыск, калі вы спрабуеце ўручную пасартаваць малюнка, выкарыстоўваючы дырэкторыі па даце. У канчатковым выніку ў падобных дырэкторыях аказваюцца часткова дубляваныя наборы малюнкаў, што не ідэальна.

Лішак рэзервовых і простых копій таксама ўносіць сваю лепту ў якая расце колькасць лішніх файлаў. У большасці дыстрыбутываў Linux у рэпазітарах маецца дадатак fdupes, якое павінна знаходзіць аднолькавыя файлы, але для малюнкаў трэба нешта больш магутнае.

Дублікаты малюнкаў могуць мець іншыя імёны і памеры, і нам таксама можа спатрэбіцца знайсці не аднолькавыя, але вельмі падобныя выявы, напрыклад, адрэдагаваныя ці тыя, якія здымаліся ў час працяглай сесіі здымкі. Відавочна, мы можам узяць для вырашэння гэтай праблемы нейкую нейронных сетку, але гэта будзе ўсё роўна што калоць арэхі кавальскай молатам.

Ёсць куды больш легкавагавая рашэнне - хоць і з дзіўнай назвай. Гэта набор скрыптоў на мове Go, які аналізуе змесціва названай дырэкторыі і змяшчае адбіткі пальцаў выявы ў сваю базу дадзеных. Findimagedupes вывучае фактары падабенства і ўяўляе спіс аднолькавых або візуальна падобных набораў малюнкаў, якія вы, магчыма, захочаце прыбраць. Вы можаце наладзіць парог падабенства, прапусціць праверку на наяўнасць аднолькавых малюнкаў і выкарыстоўваць рэкурсіўны пошук у Findimagedupes. Вось вам прыклад:

$. / Findimagedupes - R ~ / Pictures

Гэтая каманда будзе шукаць унутры ~ / Pictures, уключаючы паддырэкторыі. Вынік выводзіцца ў выглядзе простага спісу, дзе кожны радок складаецца з поўнага шляху да выявы, падзеленага прабеламі. Каб наладзіць падабенства, пакажыце параметр -t, за якім варта лік ад 0 да 63, дзе 0 азначае, што Findimagedupes будзе вызначаць толькі аднолькавыя малюнкі, а 63 азначае, што ён будзе лічыць ўсе выявы падобнымі. У наступным прыкладзе мы выкарыстоўвалі разумнае і рэалістычнае лік паміж гэтымі двума крайнасцямі:

$. / Findimagedupes - R - t 30 ~ / Pictures

Прама цяпер не цалкам відавочна, што рабіць далей, але, на шчасце, Findimagedupes дазваляе адкрываць кожны набор малюнкаў з дапамогай вонкавага прыкладання, вось так:

$. / Findimagedupes - R - t 30 - p feh ~ / Pictures

У гэтым прыкладзе мы выкарыстоўвалі Feh, паколькі гэта найменш складаны інструмент для прагляду малюнкаў, але выбар праграмы застаецца за вамі. Гэты неавтоматизированный метад дасць найбольш дакладныя вынікі, калі вы хочаце выдаліць дублікаты пасля дбайнай праверкі.

Яшчэ адзін спосаб вылічыць падабенства малюнкаў заснаваны на вылічэнні скалярнай ацэнкі падабенства для кожнай пары. Мы будзем выкарыстоўваць Butteraugli з www.github.com/google/but-teraugli, простую і прыязную да карыстача праграму для вымярэння выяўленых адрозненняў паміж малюнкамі на аснове навуковага падыходу. Butteraugli лёгка кампілюецца (проста запусціце $ make) і прапануе просты сінтаксіс каманднага радка:

$. / Butteraugli file1 file2

Butteraugli прымае файлы JPEG і PNG і патрабуе, каб абодва файла ў пары мелі аднолькавы памер у пікселях. Выводзіцца лік - паказчык падабенства, дзе 0 азначае, што малююнкі аднолькавыя, а любое іншае станоўчае лік адлюстроўвае ступень адрозненні. Выдатнай дадатковай функцыяй Butter-augli з'яўляецца яе здольнасць маляваць «цеплавую карту» адрозненняў паміж малюнкамі. Усё, што вам трэба зрабіць - вызначыць файл вываду:

$. / Butteraugli file1 file2 heat. ppm

Атрыманы ў выніку PPM-файл пакажа вам вобласці, дзе ёсць адрозненні паміж вашымі выявамі. Практычная мэта Butteraugli - дапамагчы вызначыць змены, няўзброеным вокам не бачныя. І калі Findimagedupes дапамагае вам вызначыць падобныя выявы, то Butteraugli паказвае, што менавіта ў іх адрозніваецца.

Зараз выкажам здагадку, што ўсе выявы, якія перажылі нашу Вялікую Чыстку, ўяўляюць сабой каштоўнасць, але нам усё роўна трэба паменшыць займанае імі месца. Інжынеры Google стварылі інструмент, які памяншае JPEG-файлы без шкоды для якасці. Guetzliзаявляет аб 20-30% -зніжэнне памеру файла ў параўнанні з звычайным спосабам, якім вы запісваеце JPEG ў Linux з дапамогай libjpeg. Па словах распрацоўшчыкаў Guetzli, ён дасягае балансу паміж мінімальнымі стратамі і памерам файла, выкарыстоўваючы алгарытм пошуку, які спрабуе пераадолець адрозненне паміж психовизуальным мадэляваннем фармату JPEG і психовизуальной мадэллю Guetzli.

Хуткасць аптымізацыі малюнкаў

Guetzli працуе павольна. Паводле дакументацыі Google, у яго сыходзіць каля хвіліны на кадаванне аднаго мегапікселя растравых дадзеных. Гэта азначае, што Guetzli будзе апрацоўваць кожную з вашых фатаграфій пакутліва доўга, але затое праграма выдасць найлепшую аптымізацыю памеру файла JPEG для малюнкаў, якія былі сціснутыя з каэфіцыентам паміж 84 і 100. Іншымі словамі, Guetzli карысны ў выпадку, калі вам трэба падтрымліваць вельмі высокае якасць малюнка, не павялічваючы сціск JPEG. Гэта выдатна для разавай аптымізацыі, якая вызваліць месца на вашым файлавым серверы ці іншым сховішча.

Гэта выдатна для разавай аптымізацыі, якая вызваліць месца на вашым файлавым серверы ці іншым сховішча

Для тых, хто пакуль робіць самыя першыя крокі ў аптымізацыі, Guetzli ўключае базавую прыкладанне GUI, якое дае вам магчымасць захаваць існуючыя выявы ў розных фарматах.

Запампуйце код з www.github.com/google/guetzli, праверце наяўнасць у вас файлаў распрацоўкі libpng і libjpeg і запусціце $ make у дырэкторыі праекта. Вы ўбачыце свой бінарнік ў bin / Release, і цяпер самы час даць Guetzli магчымасць выканаць сваю працу:

$. / Guetzli - quality 84 in. jpg out. jpg

Каэфіцыент 84 з'яўляецца найлепшым (і ніжэйшай з магчымых) для Guetzli. Пры тэставанні на наборы малюнкаў стала ясна, што ні адзін іншы метад сціску JPEG не параўнаецца з Guetzli па памеры файла пры гэтым каэфіцыенце. Вось прыклад каманды для групавой апрацоўкі некалькіх файлаў адначасова:

$ For file in *. jpg; do guetzli - quality 84 "$ file" "$ {file /% ext / out}"; done

Пры працы з адным файлам вы можаце абысціся без каманднага радка, звярнуўшыся да іншаму графічнаму інструменту Guetzli, які вы знойдзеце на www.github.com/till213/GuetzliImage-IOPlugin. Ён прапануе бібліятэку з агульным доступам і Image-plugin на Qt5 разам з прыязным да пачаткоўцаў дадаткам-прыкладам, куды вы можаце загрузіць для прагляду свае JPEG, наладзіць некаторыя опцыі і, нарэшце, «спячы» свой Guetzli. І хоць гэта выпяканне неверагодна нагружае CPU, гэта адзіны найноўшы інструмент аптымізацыі JPEG на дадзены момант. Якасць атрыманага ў выніку выявы выдатна - вы не зможаце адрозніць яго ад арыгінала.

РЭКАМЕНДУЕМ: Маніторынг у Linux з дапамогай каманднага радку

Аптымізацыя малюнкаў з Lepton

Мы пераходзім да наступнай новай тэхналогіі памяншэння файлаў JPEG. Lepton - кадавальнік з адкрытым кодам ад Dropbox. Ён заяўляе, што можа адціснуць яшчэ 22% з вашых звычайных JPEG, і нам стала цікава даказаць гэтую лічбу ў нашых тэстах.

Запусціць Lepton лёгка: клануецца код праекта з www.github. com / dropbox / lepton і скамандуюць $ ./autogen.sh && ./configure && make && sudo make install

Сінтаксіс каманд Lepton таксама просты:

Як бачыце, Lepton сціскае ваш файл і выдае вам вынік у невядомым фармаце. Пачынаючы з гэтага моманту, вы больш не можаце адкрыць, адрэдагаваць ці неяк яшчэ папрацаваць з вашымі файламі - пакуль зноў іх не распакуете:

Паколькі няма іншай інтэграцыі Lepton ў папулярныя прагляднікі малюнкаў для Linux, ён, відавочна, выступае проста ў ролі мэнэджэра архіваў. А ўсё гэта карысна для некаторых прыкладанняў, напрыклад, для захоўвання велізарных набораў дадзеных на дыску рэзервовага капіявання. Важна адзначыць, што Lepton забяспечвае кадаваньне без страт, таму зыходны файл і апрацаваны файл JPEG-LEP-JPEG аднолькавыя.

Важна адзначыць, што Lepton забяспечвае кадаваньне без страт, таму зыходны файл і апрацаваны файл JPEG-LEP-JPEG аднолькавыя

Сціск Lepton працуе дзіўна хутка, выдаючы ў выніку значна меншыя файлы і вельмі зручны малюнак, пакуль-зывающий эканомію месца ў працэнтах.

Lepton працуе вельмі хутка і забяспечвае лепшы каэфіцыент сціску, чым Guetzli, але памятайце, што ў сістэме без Lepton доступу да сваіх файлаў вы не атрымаеце, тады як Guetzli забяспечвае ідэальную зваротную сумяшчальнасць сваіх файлаў JPEG. Дзякуючы высокай прадукцыйнасці Lepton ідэальны для працы з вялікімі малюнкамі.

Найпросты спосаб правесці рэальны тэст - узяць файл, напрыклад, у адкрытым сховішча Wikimedia (http://bit.ly/wiki-big-im-ages) і паспрабаваць закадаваць яго з дапамогай Lepton. Звярніце ўвагу, што Lepton можа працаваць толькі з JPEG, не перавышаюць 128 МБ, так што не забудзьцеся пра гэта, выбіраючы вялікія файлы для яго праверкі. Больш за тое, вам пэўна прыйдзецца правесці дадатковыя аргументы для Lepton, каб ён апрацаваў малюнак такога памеру, вось так:

$ Lepton - memory = 4096M - threadmemory = 128M in. jpg out. lep

Мы паспрабавалі сціснуць файл 0-cynefin-ORIGINEEL.jpg (93,9 МБ) і атрымалі файл 0-cynefin-ORIGINEEL.lep, памерам усяго 64 МБ. Гэта 31% сціску! Рэальныя вынікі атрымліваюцца рознымі на розных малюнках, і ўсё залежыць ад таго, з якім менавіта выявай вы працуеце. Напрыклад, калі на малюнку знаходзяцца вобласці з суцэльным запаўненнем, штрыхавы графікай або малюнкамі, то кадавальнік справіцца нашмат лепш, чым пры працы з фатаграфіяй рэальнага аб'екта.

Улічваючы тое, што Guetzli і Lepton працуюць з JPEG, нам было цікава сціснуць тэкставы файл, выкарыстоўваючы абодва кадавальнік. Што датычыцца прымянення да набору звычайных фота 11-15 MP першая стадыя дала нам сціск паміж 14 і 20%, а другая - дала сціск яшчэ на 20-25%. Агульная прадукцыйнасць гэтай камбінацыі была паміж 30 і 40%, што проста ўзрушаюча для сціску амаль без страт (у рэшце рэшт, гэта JPEG).

Аптымізацыя малюнкаў з FLIF

Мы ўжо ступілі на амаль недаследаванай зямлю альтэрнатыўных фарматаў файлаў малюнкаў, і цяпер прыйшла пара змяніць фармат JPEG на PNG.

Ёсць шмат выпадкаў, калі PNG пераважней JPEG, напрыклад, у скрыншотах, малюнках у Сеткі, ды і для ўсяго астатняга, акрамя фатаграфій. FLIF азначае Free Lossless Image Format, і ён заснаваны на сціску MANIAC. MANIAC (Meta-Adaptive Near-zero Integer Arithmetic Coding) - алгарытм для энтропийного кадавання, які выкарыстоўвае кантэкстна-залежную двойкавую арыфметыку.

Па нашаму вопыту, FLIF з'яўляецца амаль ідэальнай заменай фарматаў PNG, lossless WebP, lossless BPG, lossless JPEG2000 і lossless JPEG XR у плане каэфіцыента сціску. Вялікая перавага FLIF у тым, што гэта універсальны фармат, прыдатны для кадавання любога выгляду малюнкаў, няхай гэта будзе фатаграфія, малюнак, карта або што-небудзь іншае, і вы ў любым выпадку ўсё роўна выйграеце дадатковыя кілабайты.

Пачніце з кланавання кода і затым перайдзіце ў дырэкторыю src ўсярэдзіне дрэва root. У FLIF не так ужо шмат залежнасцяў акрамя пакета распрацоўкі libpng, але каб скампіляваць праграму, трэба паказаць мэты Automake ўручную:

$ Make flif libflif. so libflif_dec. so viewflif

Гэтая каманда зразумелая сама па сабе: вы атрымліваеце выкананы кадавальнік, дзве бібліятэкі з размеркаваным доступам для кадавання і дэкадаванні і простую праграму прагляду для файлаў FLIF. Скапіруйце flif і viewfif в / usr / bin (або любое іншае месца ў $ PATH), скапіруйце бібліятэкі куды-небудзь накшталт / usr / lib64 (у розных дыстрыбутывах Linux гэта па-рознаму), і вы гатовыя. Кадавальнік FLIF мае шмат опцый каманднага радка (гл. $ Flif -help output), але калі вы іх не карыстаецеся, то ён вырашыць, што вам трэба сціск без страт з интерлейсингом, як у наступным прыкладзе:

Вы можаце выкарыстоўваць з FLIF толькі файлы PNG або PNM, і для зручнасці вы павінны заўсёды выкарыстоўваць пашырэнне .flif для атрыманых у выніку файлаў. Вынікам з'яўляецца файл, больш чым на 40% менш, чым звычайна PNG (як тыя, якія сціснутыя наладамі GIMP па змаўчанні) і амаль на 15% менш, чым lossless WebP. FLIF забяспечвае неверагодную аптымізацыю файлаў і пераўзыходзіць усе астатнія фарматы файлаў. Да таго ж кадавальнік даволі хуткі, і калі вы паглядзіце на нагрузку на CPU, яна дзесьці паміж Guetzli і Lepton.

FLIF існуе ўжо некаторы час, і ўжо ёсць праграмы, якія па змаўчанні падтрымліваюць FLIF. Самая інтрыгуе - Qt FLIF Plugin (www.github.com/spillerrec/qt-flif-plugin), якая выдатна спраўляецца з задачай выхаду FLIF ў вялікі свет. Убудова дазваляе ўсім праграмам на Qt па змаўчанні падтрымліваць FLIF, як калі б гэта быў яшчэ адзін базавы растравы фармат тыпу PNG, TIFF, JPEG і іншых.

Родная падтрымка ў Qt адкрывае больш магчымасцяў для FLIF. Вось падтрымка значкоў FLIF ў Dolphin.

Каб убудова зарабіў, патрэбна некаторая акуратнасць у размяшчэнні яго файлаў. Пасля кампіляцыі кода вы атрымліваеце бібліятэку з размеркаваным доступам libflif.so, імя якой супадае з імем бібліятэкі, якая пастаўляецца з самім FLIF. Таму, хоць у вас ужо ёсць /usr/lib64/libflif.so, вы павінны скапіяваць libflif.so плагіна ў пункт прызначэння па змаўчанні вашых сістэмных убудоў малюнкаў, напрыклад, / usr / lib64 / qt5 / plugins / imageformats /. Файлы * .desktop трэба адправіць у / usr / share / kservices5 / qimageio-plugins, а x-flif.xml павінен пасяліцца ў / usr / share / mime / packages.

Калі вы не выкарыстоўваеце KDE Plasma, вы ўсё роўна можаце палегчыць сабе жыццё дзякуючы асобным дадаткам Imgviewer (www.github.com/spillerrec/imgviewer). Звяжыце .flif з Imgviewer ў вашым мэнэджару файлаў - і зможаце праглядаць малюнкі FLIF на любым працоўным стале.

РЭКАМЕНДУЕМ: Упраўленне праграмамі з кансолі Linux

стварэнне эскізаў

Пры праглядзе малюнкаў у мэнэджару файлаў вы разлічваеце ўбачыць іх мініяцюры. Стварыць мініяцюры для малюнкаў JPEG ці PNG проста для ўсіх асноўных менеджэраў файлаў, тыпу Dolphin, Nautilus або Nemo. Але варта вам ўзяцца за альтэрнатыўныя фарматы файлаў, як усё становіцца цікавей.

Раней мы згадвалі Qt FLIF Plugin, які вырашае праблему эскізаў FLIF ў Dolphin, але вы таксама можаце атрымаць эскізы FLIF ў Nautilus або Nemo з дапамогай іншай тэхналогіі. Стварыце выкананы файл / usr / local / bin / flif-thumbnailer з дапамогай:

#! / Bin / bash

temp = $ (mktemp). png

flif - d "$ 1" "$ temp"

convert "$ temp" - resize "$ 3" x "$ 3" "$ 2"

rm "$ temp"

Затым стварыце яшчэ адзін файл, / usr / share / thumbnailers / flif. thumbnailer, і запоўніце яго такім кодам:

[Thumbnailer Entry]

TryExec = / usr / local / bin / flif - thumbnailer

Exec = / usr / local / bin / flif - thumbnailer% i% o% s

MimeType = image / flif;

Нарэшце, зарэгіструйце новы тып MIME файла, стварыўшы файл /usr/share/mime/packages/flif.xml. Запоўніце яго такімі радкамі:

<? xml version = "1.0" encoding = "UTF - 8"?>

<Mime - info xmlns = 'http: //www.freedesktop.org/standards/shared-mime-info'>

<Mime - type type = "image / flif">

<Comment> image FLIF </ comment>

<Glob pattern = "*. flif "/>

</ Mime - type>

</ Mime - info>

Вось вы ўсё і зрабілі. Прыведзены метад не занадта прыгожы, паколькі вы просіце thumbnailer канвертаваць FLIF в PNG, каб намаляваць кожную мініяцюру, але ён надзейна працуе і дае годнае прадукцыйнасць.

Тое ж можна зрабіць для любога іншага фармату файлаў, калі вы ведаеце каманду дэкадавання. У выпадку Lepton проста заменіце flif -d "$ 1" "$ temp" на lepton "$ 1" "$ temp" і адпаведна зменіце астатнія файлы для Lepton, і ўсё павінна працаваць гладка. Працэс дэкадавання Lepton нашмат хутчэй, чым працэс, які выкарыстоўваецца ва FLIF, так што мініяцюры будуць хутчэй стварацца для .lep -файлов.

Больш шырокае ўкараненне FLIF

Якім бы пашыраным ні быў новы фармат файлаў, шырокая аўдыторыя не прыме яго, пакуль ён не будзе падтрымлівацца па змаўчанні прыкладаннямі прамысловага стандарту. У FLIF ўсё ідзе добра, так як мы ўжо можам кадзіраваць і дэкадаваць '.flif-файлы з дапамогай ImageMagick (каманды тыпу mogrify і convert - яе кампаненты). Мы не гарантуем, што ваша наяўная ўстаноўка ImageMagick зможа працаваць з FLIF прама зараз, паколькі многія вытворцы Linux ўсё яшчэ лічаць FLIF эксперыментальным фарматам і не ўключаюць дадатковых сцягоў кампіляцыі пры стварэнні сваіх пакетаў ImageMagick. Але кампіляцыя ўласнай асобніка ImageMagick ў Linux не так ужо цяжкая.

Яшчэ адным вялікім дасягненнем маглев б стацыі уключэнне падтрымкі FLIF Ў галоўнае дрэва браўзэра Chromium. Chromium - самая папулярная базавая тэхналогія для дзясяткаў вытворных па ўсім свеце (калі вы здольныя справіцца з кампіляцыяй вялізнага пакета зыходнікаў Chromium, то цалкам зможаце стварыць уласны дамарослы браўзэр!).

Пакуль што FLIF не з'яўляецца часткай Chromium, таму што ён яшчэ не дасягнуў сталасці. З іншага боку, Google прасоўвае уласны фармат WebP, гэта прамы канкурэнт FLIF. У большасці тэстаў FLIF пераўзыходзіць WebP з салідным адрывам, але калі гаворка ідзе пра выкарыстанне графікі ў Інтэрнэце, розніца неістотная.

Encoding = "UTF - 8"?