Már a lakásfelújítás korai szakaszában kitaláltam, hogy egy jeles napon a fotóblogom összes indexképét kinyomtatom és egy hosszú csík formájában rátapétázom a fal egy részére. Ennél személyesebb dekorációt elképzelni sem tudok (ez nyilván engem minősít persze), a fotóblog újkori életem krónikája, minden, ami velem történt 2004 eleje óta, ott van valamilyen formában, a (jelenleg) 745 kép valamelyikén.
Nos, az elgondolást mostanra követte tett, bár a képek mennyisége és dekorációs okok miatt Jul közreműködésével nagyon kicsit változott a koncepció: nem egy csík lett a falon, mert az több, mint 5 méter lenne és már nem nézne ki jól. (Valahol megvalósul majd az „egy hosszú csík” ötlet is, de még nem tudjuk, hol.) 2×6 és még valamennyi A4-es papírra van függőlegesen kinyomtatva a cucc, egy kb. 2 négyzetméteres területet ölelve. Aztán: a tapétázás a tintasugaras technológia miatt nem játszik (valószínűleg elkenődne a festék a tapétaragasztótól), ezért beszereztünk fekete kartont, ami mintegy keretezi a kompozíciót. (A lézernyomat pedig nem pálya, személyes tapasztalatom miatt: egyszerűen a lézernyomtatók, amikkel eddig találkoztam, beleértve a céges 600 ezer forintos Xeroxot is, nem valók fotók nyomtatására, nem lesz szép az eredmény.)
Ami a művelethez szükséges:
- Epson C-86 fotónyomtató, DuraBrite technológia és sok pótpatron.
- Fekete kartonpapír, B3, asszem. (55×70 cm.)
- Matt fotópapír.
A projekt szoftveres részét (lévén GNU/Linux freak) parancssorban végeztem, kell hozzá:
- Gawk, sed, ImageMagick (montage parancs) és egy csipetnyi GIMP.
- Másolat a fotóblog thumbnailekről.
- Adatbázis dump a fotóblog megfelelő táblájáról: arról, amelyik tartalmazza a filenév-dátum összerendeléseket.
Több problémába futottam bele már az elején. Először is, a Pixelpost defaultban nagyon rossz minőségű indexképeket generál a fotók feltöltésekor: 75-ös quality-vel generál 100×75 pixeles jpg-ket, ami nagyon szőrös, de a monitoron igazából nem látod. Nem úgy nyomtatáskor: ronda pixeles-szőrös képek jönnek ki a tesztnyomatkor. A megoldás a thumbnailek újragenerálása a Pixelpost rutinja segítségével, 96-os minőségben, háromszoros méretben. Így 216 dpi-n tudom majd nyomtatni a kisképeket, jó minőségű nem pixeles eredményt kapva.
(Megoldás lett volna az is, ha újragenerálom a thumbnaileket ImageMagick segítségével kézzel, de ezt elvetettem, mert a 4 féle képméretből (álló 4:3, fekvő 4:3, álló 3:2, fekvő 3:2) egységes thumbnaileket generálni nem valami vicces tevékenység. A Pixelpostra hagytam a dolgot: amit egyszer valaki már implementált, azt minek csináljam meg megint.)
A másik probléma a dátumok problémája volt: a fotók nem pontosan abban a sorrendben kerültek fel, ahogy a valóságban készültek, ezeknél utólag állítottam dátumot, tehát a dátum szerinti és a Pixelpost által adott unique ID szerinti sorbarendezés közel sem hozta ugyanazt az eredményt. Mivel itt egy vizuális krónikáról van szó, értelemszerűen a dátum szerinti sorbarendezést akartam megvalósítani. Ehhez kell az adatbázistábla.
Nos, ezen a ponton vágjunk bele a parancssori bütyizésbe, rövid kommentekkel:
Először fogjuk az adatbázistáblát (illetve annak csv exportját – ezt pl. PHPMyAdmin segítségével lehet kinyerni, nem éppen a leg-1337-ebb módon) és kinyerjük belőle a kevert listát. Amire kíváncsiak vagyunk, az a DATE és a FILENAME field.
awk ‘BEGIN { FS = „;” } ; {print $2 $5}’ [adatbázistábla].csv >list_mixedMost fordított sorrendben rendezzük a kapott listát. Mivel az első mező a dátum, szerencsénkre nem unique ID, hanem dátum szerint lesz (fordítva) rendezve a lista: legfelül a legújabb.
sort –reverse list_mixed >list_sorted_revA rendezett listából most már csak a filenevek érdekelnek minket, a dátumokat eldobjuk.
awk ‘BEGIN { FS = „”” }; {print $4 }’ list_sorted_rev >list_sorted_rev_filenamesVan egy listánk a nagyképek fileneveivel. A Pixelpost sémája a thumbnailek filenevét a thumb_ előtaggal látja el, ezt beszúrjuk a listába a filenevek elé.
sed ‘s/^/thumb_/’ list_sorted_rev_filenames >list_sorted_rev_thumbMegvan, ami kell a montage-nak. Most fogjuk, és a thumbnail directoryban legeneráljuk a listából a thumbnaileket tartalmazó nagy képet. Egy sorban 5 kép lesz.
montage `cat list_sorted_rev_thumb` -mode Concatenate -tile 5x montage.jpg
Ennyi a dolog parancssori része. Értelemszerűen ugyanezt GD-vel, weben is meg lehetne csinálni, de ahhoz nem értek. (Viszont szívesen fogadok minden alternatív megoldást, pl. nem lenne szar webről generálni az ilyen óriásindexet.) Az is egyértelmű, hogy az egészet össze lehet hozni egy ronda hosszú parancssorba, itt a jobb áttekinthetőség kedvéért szedtem külön sorokba a parancsokat.
Az eredményünk egy hosszú montázskép: 745 képnél, soronként 5 képpel és 300×225 pixeles thumbnailekkel 1500×33525 pixel, jpg formátumban is valami 38 MB. Ezt a legegyszerűbb GIMP segítségével feldarabolni: egy A4-re kis ráhagyással 11 sor fér rá (11 kép egymás alatt), tehát lesz (a 149 sorból 13 A4-es oldal, és valamennyi resztli. (Ezen a ponton jó szolgálatot tesz egy analóg olló, az alsó sorok babrálásához.)
A további feladat GIMP-ből nagy felbontáson kinyomtatni a 13 és fél oldalt, kivágni az 5×11 képes egységeket és felragasztani a fekete kartonra. Az, hogy nem pont A4 a méret, jó: marad a kartonból egy kis border az egész műnek, ami elég jól fog így kinézni, kiemeli a (kvázifehér) falháttérből a képeket.
És kész. Az én nagy indexképem kicsiben itt látható (500 kB), a megvalósult mű pedig, amint felkerül a falra, szintén itt lesz – update formájában. Jelenleg a nyomtatás szakaszban tartok, 2 oldal kinyomva, és már látszik, hogy merre tartunk, elég jól néz ki.
Update 2006-08-16: Mivel a kész termék 2 méternél is magasabb (soronként 10 képpel), az egyben felhelyezést elvetettük. A legújabb verzió az, hogy 4 db. „tömb”-be lesznek rendezve, azok pedig elszórv a lakás egyes pontjain, nem túl messze egymástól, és persze a logikai (időrendi) szempontokat szem előtt tartva.
Update 2006-08-16: A készülés fázisairól fotók itt.
photomosaic?
vagy már nincs üres falad csak egy csík? :)
Ez mekkora ötlet!!!
Bár az én archívumom ha 5 képet rakok egymás mellé, és 2×3 centisek csak a képek, akkor is több, mint 5 méter lesz… még gondolkozom rajta :)