Orezanie obrazku cez bash skript

Založil Erich Stark, 02. 04. 2013, 00:11:59

Předchozí téma - Další téma

Erich Stark

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

#!/bin/bash
FILES="$@"
for i in $FILES
do
echo "Cutting around picture $i..."
/usr/bin/convert -shave 10x10 $i new.$i
done

" The box said that I needed to have Windows XP or better ... so I installed Debian ."

Roman Horník

#1
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...
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

Erich Stark

Praveze to nieje jpeg ale png

prikladam obrazky na porovnanie ako ich zmeni
https://mega.co.nz/#!iQdy1YbB!M8WSuXgBHVjeamy61X4MMiHcFUVAPGr4jHokCZaUoys

" The box said that I needed to have Windows XP or better ... so I installed Debian ."

Roman Horník

#3
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í.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz