Debian fórum

Dotazy => Programování => Téma založeno: Erich Stark 02. 04. 2013, 00:11:59

Název: Orezanie obrazku cez bash skript
Přispěvatel: Erich Stark 02. 04. 2013, 00:11:59
Zdravim prave som sa chystal orezat obrazky ktore som skenoval asi tak 10px z kazdej strany lebo tam je cierny okraj. Je ich asi 150 tak to nechcem robit rucne cez nejaky gui nastroj. Idealne by bolo cez bash skript za pouzitia kniznice. Davnejsie ked som si vytvaral thumpnaily tak som pouzil kniznicu /usr/bin/convert . Neskusali ste nieco podobne? v converte som zatial nenasiel ten spravny prepinac pomocou ktoreho by to slo.

UPDATE> Cast skriptu som uz poriesil, ale mam problem ze mi to strasne znizi kvalitu obrazku a neda sa citat

Kód: [Vybrat]
#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Cutting around picture $i..."
/usr/bin/convert -shave 10x10 $i new.$i
done
Název: Re: Orezanie obrazku cez bash skript
Přispěvatel: Roman Horník 02. 04. 2013, 01:07:51
Ty obrázky jsou v JPEGu, viď? U JPEGů je problém v tom, že téměř jakákoli úprava degraduje jeho kvalitu. Ale když už jsme u ImageMagick, můžeš nastavit výstupní kvalitu tak, aby to tolik nebolelo:

blablabla
convert $i -shave 10x10 -quality 90 new.$i
blablabla


Nebo namísto toho můžeš použít prográmek z balíku libjpeg-progs, kterej by mohl bejt snad rychlejší. Máš například obrázek 1600×1200 a chceš ho oříznout o 10px na každý straně:
blablabla
jpegtran -crop 1580x1180+10+10 -copy none $i > new.$i
blablabla


Ale bacha! Pro minimalizaci ztrát na kvalitě používej pro ořez násobky 16, tzn.:
convert $i -shave 16x16... nebo jpegtran -crop 1568x1168+16+16...
Název: Re: Orezanie obrazku cez bash skript
Přispěvatel: Erich Stark 03. 04. 2013, 00:31:35
Praveze to nieje jpeg ale png

prikladam obrazky na porovnanie ako ich zmeni
Kód: [Vybrat]
https://mega.co.nz/#!iQdy1YbB!M8WSuXgBHVjeamy61X4MMiHcFUVAPGr4jHokCZaUoys
Název: Re: Orezanie obrazku cez bash skript
Přispěvatel: Roman Horník 03. 04. 2013, 08:47:04
Erino, takže takhle:

convert $i -set colorspace gray -shave 10x10 new-$i

IM totiž asi bere zjevně dvoubitovej vstup jako jednobitovej, proto ho tak ukládal. Ale neboj se, velikost obrázku se nezvětší, dokonce se redukuje zhruba na polovinu i bez ořezu. Vstup má 80.33KiB, výstup (bez ořezu) 43KiB (53.5%), s ořezem 10×10 41.1KiB (51.2%), a to bez ztráty na kvalitě.
Pokud za -shave 10x10 přidáš -define png:compression-level=9, míra komprese se ještě zlepší (bez ořezu 39.2KiB, tzn. 48.8%, s ořezem 37.4KiB, neboli 45.5%), ovšem za cenu o cca 75% delšího zpracování.