ImageMagick - skalowanie zdjęć 2007-03-05
Skalowanie zdjęć jest operacją dość często stosowaną, zwłaszcza gdy chcemy komuś posłać na emaila np. zdjęcia z imprezy. Wysyłanie w oryginalnym rozmiarze mija się z celem (wydłuża czas wysyłania i ściągania).
Nie wiem jak to zrobić pod windowsem (pewnie jakiś program ma taką opcję), ale linux zawsze wydawał mi się odpowiedni do takich rzeczy. Prosty skrypt w sh + ImageMagick (pakiet narzędzi do obróbki zdjęć) i gotowe.
Treść skryptu skalowanie.sh:
#!/bin/sh
for i in *;
do
echo File \'$i\' resizing..
convert "$i" -resize 50% "normal$i" ;
done
Przykładowe wywołanie, które utworzy przeskalowane zdjęcia z danego katalgu:
$ ./skalowanie.sh *.jpg
Słowa kluczowe: Linux, Techblog, imagemagick, sh, shell, skalowanie, zdjęcia, artykuł, blog
W Windowsie zrobienie miniaturek też nie jest specjalnym problemem, wystarczy odpowiedni program - choćby BIMP.
Albo IrfanView... ;p
Albo XnView - btw. jest też wersja linuksowa, niestety nieco zapóźniona w rozwoju.
erm ten tego i on (bimp, irfanview) tak sam śmignie wszystkie na raz?
@GiM: nie wiem właśnie (chyba nie), dlatego wpisałem BIMP-a :D.
XnView śmignie. I w Windows i w Linuksie.
ale skryptem z konsoli jest koszerniej i fajniej!
Można się zdziwić, jeśli nazwa pliku będzie zawierała spację... :) Dodatkowo czemu przeskalowany obrazek ma mieć w nazwie 'normal' ? ;)
Proponuję:
echo "File \'$i\' resizing..."
convert "$i" -resize 50% "thumb_$i" ;
Dzięki za cudzysłowie, zaraz poprawie. Co do słowa 'thumb' to yyy to nie jest bynajmniej robiona miniaturka ;)
Gwenview w linuksie umożliwia skalowanie etc. wszystko w trybie graficznym i myslę że to duzo lepsze rozwiązanie niż konsola i przedstawiony skrypt ;p bo można wybierac pliki z różnych źródeł ;) okreslac parametry oraz wybrac katalog docelowy itp. itd.
Ja to robie ustawiają konkretną rozdzielczość:
#!/bin/sh
for img in `ls $1*.jpg`
do
echo
convert -verbose -sample 800x600 $img $img
done
exit 0
A co jak masz mniejsze fotki i nie trzeba ich przeskalować ?
Jeśli ktoś lubi pracować w interfejsie graficznym, i chciałby przeskalować pojedyncze zdjęcia za pomocą podanej tutaj metody to polecam zrobienie sobie skryptu wykorzystującego XDialog http://xdialog.free.fr/
Moja wersja napisana dla xdialog wygląda następująco:
#! /bin/bash
# parametry okna
ti='Program scale' # tytol okna
bti='scale' # podtytol okna
di='15 90' # rozmiar okna
# okno 1
st='Skrypt przeskaluje zdjecie do procentowo zadanego wymiaru.'
Xdialog --title "$ti" --backtitle "$bti" --msgbox "$st" $di
# okno 2
st='Podaj nazwę pliku zdjęcia które chcesz przeskalować'
Xdialog --title "$ti" --backtitle "$bti" --inputbox "$st" $di nazwa_foto.jpg 2>/tmp/.tmp_n$$
# okno 3
st='Podaj liczbę % przeskalowania: 100 -rozmiar oryginalny, 50 -zmniejszeni o połowę, 150 -powiększenie'
Xdialog --title "$ti" --backtitle "$bti" --inputbox "$st" $di 50 2>/tmp/.tmp_p$$
#skalowanie zdjecia
n=$(2</tmp/.tmp_n$$)
p=$(2</tmp/.tmp_p$$)
convert "$n" -resize "$p%" "scale_$n"
# okno 3
st="$n zostało przeskalowane do wymiaru $p% oryginału i znajduje się w katalogu domowym"
Xdialog --title "$ti" --backtitle "$bti" --msgbox "$st" $di
#usuwanie plików tmp
rm /tmp/.tmp_n$$ /tmp/.tmp_p$$