Autor Téma: Orezanie obrazku cez bash skript  (Přečteno 3233 krát)

Offline Erich Stark

  • Aktivní­ uživatel
  • ****
  • Příspěvků: 546
    • Zobrazit profil
Orezanie obrazku cez bash skript
« kdy: 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
« Poslední změna: 02. 04. 2013, 00:22:09 od Erich Stark »
" The box said that I needed to have Windows XP or better ... so I installed Debian ."

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.324
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re: Orezanie obrazku cez bash skript
« Odpověď #1 kdy: 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...
« Poslední změna: 02. 04. 2013, 09:36:00 od Roman Horník »
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Pentium G2020
* GPU: NVIDIA GTX650 1GD5
* MB: LenINovo IH61M
* RAM: 8GiB Deutsche Demokratische Republik 3

Offline Erich Stark

  • Aktivní­ uživatel
  • ****
  • Příspěvků: 546
    • Zobrazit profil
Re: Orezanie obrazku cez bash skript
« Odpověď #2 kdy: 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
" The box said that I needed to have Windows XP or better ... so I installed Debian ."

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.324
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re: Orezanie obrazku cez bash skript
« Odpověď #3 kdy: 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í.
« Poslední změna: 03. 04. 2013, 09:26:28 od Roman Horník »
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Pentium G2020
* GPU: NVIDIA GTX650 1GD5
* MB: LenINovo IH61M
* RAM: 8GiB Deutsche Demokratische Republik 3