ImageMagick trükkök tömeges műveletekhez
Az ImageMagick egy nagyszerű eszköz, ha képekkel akarunk különböző automatizált műveleteket végezni. És ehhez rengeteg eszközt nyújt.
A legegyszerűbb eszköz a convert, amivel egy képből elő tudunk állítani egy másikat. De természetesen nem csak egy képre működik, hanem képek egy csoportjára is. Ami az egyik legfontosabb, hogy a műveleteket egymásra halmozhatjuk, és azok a megadás sorrendjében fognak lefutni.
Például, ha egy képet át akarunk méretezni és konvertálni egy másik formátumba:
$ convert -resize 640x480 image.png image.jpg
Ekkor az image.png
fájlt át fogja méretezni úgy, hogy egy 640 pixel széles és 480 pixel magas dobozba beleférjen, megtartva a kép arányait. Az eredményt ezután el fogja menteni image.jpg
néven (és természetesen JPEG formátumban).
Ha például még fekete-fehérré is át akarjuk konvertálni közben akkor:
$ convert -resize 640x480 -type GrayscaleMatte image.png image.jpg
Természetesen ha a képeink nem arányosak a 640×480 aránnyal, akkor az eredményül kapott kép kisebb lesz, mint 640×480 pixel. Előfordulhat, hogy mi mégis 640×480 méretű képet szeretnénk. Ehhez jó lenne, ha a vásznat az is megnövelné úgy, hogy a szélekre rakjon valami háttérszínt.
$ convert -resize 640x480 -type GrayscaleMatte -background "#ffffff" -gravity center -extent 640x480 image.png image.jpg
Ekkor fehér háttérrel lesz kitöltve a kép, majd erre pakolja fel a képünket, középre rendezve mind függőlegesen, mind vízszintesen, és természetesen a vásznat átméterezve 640×480 pixelre. Természetesen játszhatunk mind a háttérszínnel, mind a kép elrendezésével is a nagyobb vásznon. Ha például átlátszó hátteret szeretnénk, akkor adjunk meg -background none
-t. Természetesen a színeket megadhatjuk többféle formátumban is, nem csak a példában bemutatott hexadecimálisban. Használhatunk RGB, RGBA, HSL, HSLA, CMYK illetve CMYKA értékeket is a CSS megadásnak megfelelően, például -background "rgba(255,0,0,0.5)"
.
Az elrendezéshez a -gravity
értékét kell módosítanunk NorthWest
, North
, NorthEast
, West
, Center
, East
, SouthWest
, South
, SouthEast
értékek közül választva.
Amennyiben a képet trim-melni szeretnénk (azaz a széleken levő azonos színű (illetve átlátszó) részt le szeretnénk vágni a képről), akkor használjuk a -trim
kapcsolót. Ha nem pontosak a színek, hanem egy tartományba esnek, akkor használhatjuk a -fuzz
kapcsolót, aminek megadhatjuk relatív és abszolút értékkel is, milyen tartományt találjon egyezőnek. Az előzőt bővítve tehát így nézne ki a parancs:
$ convert -trim -resize 640x480 -type GrayscaleMatte -background "#ffffff" -gravity center -extent 640x480 image.png image.jpg
Ez előbb levágja a szélekről az egyező színt, majd átméretez, fekete-fehérré alakít, majd fehér háttérrel középre rendezve létrehoz egy 640×480 méretű képet.
mogrify
A mogrify annyiban különbözik, hogy a képekkel helyben dolgozik, azaz a megadott képeket felülírja (kivéve ha más kimeneti fájlformátumot adunk meg a -format
kapcsolót használva).
$ mogrify -resize 320x240 -background none -format png *.png
Ekkor az összes a könyvtárban levő PNG fájlt átméretezi 320×240 pixelesre, átlátszó háttérrel lementi őket, felülírva az eredeti fájlokat.
montage
A montage program segítségével pedig több képből tudunk egy montázst készíteni, azaz több képet tudunk egy nagy képre helyezni.
$ montage -background "#ffffff" -tile 4x1 -geometry +0+0 image_1_[1-4].png image_1.jpg
Ekkor az image_1_1.png
, image_1_2.png
, image_1_3.png
, image_1_4.png
képeket egy image_1.jpg
nevű képbe egyesíti úgy, hogy a 4 kép kerül egymás mellé egy sorba. A -tile 4x1
határozza meg, hogy mennyi elem kerüljön egy sorba, és hány sor legyen. A -geometry +0+0
határozza meg, hogy ezek a képek milyen közel kerüljenek egymáshoz vízszintesen illetve a sorok függőlegesen. Ebben az esetben közvetlenül egymás mellé kerülnek az elemek. A -geometry +1+1
esetén pedig a képek között lenne egy egy pixeles rés mind a sorok mind az oszlopok esetén.
A montage
ideális sprite-ok készítésére, ami nagyon hasznos tud lenni, ha kevesebb képet akarunk a felhasználóval letöltetni, mivel több képet egyel helyettesítünk.