Kabukta; resimler üzerinde sihir yapın
ArticleCategory:
Graphics
AuthorImage:
TranslationInfo:
original in en Katja
Socher
en to tr:Murat Mestani
AboutTheAuthor:
Katja, LinuxFocus dergisinin Alman editörüdür. Kendisi Tux, film ve fotoğraflardan hoşlanır, denizi sever. Kendi sanal dokusuna buradan ulaşabilirsinizhere.
Abstract:
Bu makalede Imagemagick sihirbazının grafik araçlarını kendi hammaddesiymiş, kabuğu da sanki büyülü sopasıymış gibi kullanarak neleri yapabildiğine göz
atacağız.
ArticleIllustration:
ArticleBody:
Sihir yapmak
Eski zaman sihirbazları(wizard) hammaddelerini alır, onları büyük
bir kapta birbirleriyle karıştırır büyülü sopalarını sallar ve sihirlerini
fısıldarlardı…ve aniden birisi kurbağaya dönüşürdü. Modern zaman sihirbazları,
toplumdaki diğer insanlar gibi oldukça uzmanlaşmışlardır. Büyü kitapları sadece
belli başlı işler için birkaç büyü içermektedir. Bu demektir ki Imagemagick'in
genel amaçlı kullanım için büyü kitabı yoktur. Pek çok yönlerden 'Gimp' veya
diğer grafik programları ile rekabet edemez ancak çok kullanışlı olan uzmanlaşmış
özellibbklere sahiptir.
Imagemagick'in gerçek gücü, kabukta çalışırken pek çok uygulamanın otomatiğe
bağlanabilme özelliğinin altında
yatmaktadır.
Ancak bazı sihirleri anlatmadan önce kısaca ana başlıkları gözden
geçirelim:
Temel yapı taşları
veya ImageMagick nedir?
ImageMagick, imgelerle çalışabilmek için grafik araçlarının bir
araya getirilmiş halidir. Bu araçlar: göster (display), dışarıdan
dahil et (import), canlandırma (animation), monte et (montage),
dönüştür (convert), mogrify, tanımla (identify) ve katıştır (combine) dır.
Göster (display): Eğer "göster &" yazarsanız, istenen pencere
görünür ve resmin üzerinde direkt olarak çalışabilirsiniz. Menü üzerinden
bir dosya açabilir, kaydedebilir, silebilir, çevirebilir, döndürebilir,
rengini değiştirebilir veya resmi içeri doğru dağıtmak (implode), antetlemek
(emboss), etrafına çerçeve koymak vs. gibi belirli efektler uygulayabilirsiniz
Dışarıdan dahil et (Import) komutuyla tüm ekranın veya belirli resim
veya pencerelerin görüntülenmesini sağlayabilirsiniz.
Canlandırma (Animate), imgeleri oynatmak için bir araçtır.
Seri haldeki görüntüleri arka arkaya getirmeyi seçebilir veya canlandırılmış
gif resmini izleyebilirsiniz.
Monte et (Montage) ile dizili görüntüler yaratabilir veya
canlandırılmış bir gif dosyasının içindeki bir resmi alabilirsiniz.
Dönüştür (Convert) çok güçlü bir araçtır. Bir resmi başka bir
kalıba (format) dönüştürebilirsiniz. Örneğin gif resmini jpeg'e veya başka
birine dönüştürebilirsiniz. Resmin ebadını da değiştirebilir ve üzerinde
pek çok efektler uygulayabilirsiniz.
Mogrify, dönüştür komutuyla benzerlik gösterir. En büyük farkı
mogrify ile mevcut görüntü üzerinde yapılan değişiklikleri kaydedebilirsiniz
ancak dönüştür komutu ve diğer kullanılan komutlarda, üzerinde değişikşik
yapılmış dosyaların nereye kaydedileceğini gösteren bir dosya belirtmeniz
gerekir. Onun için ben bu komutu hemen hemen hiç kullanmam.
Tanımla (Identify), size resmin geometrisi, boyutu, adı,
kalıbı (format) hakkında bilgiler verir.
Katıştır (Combine) komutu iki veya daha fazla resmi başka
bir resme katar. Örneğin her bir
resmin üzerine logo koyabilirsiniz.
Araçları kullanabilmek için aracın adını, ardından da hangi seçeneği
istediğinizi yazmanız gerekir. Değiştirilecek olan resmin hangi dosya adı
altında saklanacağı da
belirtilmelidir.
Örneğin tux1.gif dosyasına 3 numara kalınlıkta çizgi çizmek ve bunu tux1characoal.gif
olarak kaydetmek istiyorsanız
convert -characoal 3 tux1.gif tux1characoal.gif
Bu bilgilerden sonra şimdi de temel yapı taşlarına bakalım ve biraz sihir yapmayı deneyelim:
Bazı Sihirler
Resimlerin yükseklik ve genişliğini değiştirme
Düşünün ki son kurbanlarınız olarak kurbağaya dönüştürmüş olduğunuz kişileri
içeren elinizde yığınla resim var ve bunları sanal dokuya (web page) koymak
istiyorsunuz. Dosyaların yüklenme zamanını azaltmak için resimlerinizi küçültmek
istiyorsunuz. Dönüştür komutu ile resimlerinizi daha büyütebilir veya daha
küçültebilir veya bunları çok küçük hale (thumbnail) getirebilirsiniz.
convert -geometry 60x80 image.gif out.gif
komutu image.gif dosyasını, genişliği 60, yüksekliği 80 olan ölçüye getirir ve
oluşan resmi out.gif olarak kaydeder.
Tüm resimlerimizin yükseklik ve genişlik olarak örneğin 80 olmasını istiyorsak:
#!/bin/sh
for f in $* ;do
convert -geometry 80x80 $f t_$f
echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>"
done
# end of script
şeklinde yazmamız gerekir.(Bu satırları dilediğiniz herhangi bir yazı editörünün
(vi, emacs, nedit, kedit...) içine yazın ve ev dizininiz altındaki mksmallimage
altına kaydedin. Daha sonra bash kabuğuna gidin ve
chmod 755 /home/katja/mksmallimage
(katja yerine ev dizininizin adını yazın) Ardından
/home/katja/mksmallimage xxx.jpg *.gif yazın. Bu bütün
gif dosyalarını xxx.jpg de dahil olmak üzere dönüştürecektir.
Kuşbakışı (OverWiev) resim yaratma
Elinizde son birkaç yıl içinde kurbağaya çevirdiğiniz
tüm kişileri içeren bir CD var. Sizi kıskanan diğer sihirbazlar
köpeklerini de kurbağaya çevirdiğinizi ispatlamanızı istiyorlar
ve şimdi siz tüm gücünüzü o fotoğrafı bulmak için harcıyorsunuz.
Eğer Cd'deki resimler kuşbakışı olsaydı bu durumdan kurtulabilirdiniz.
Imagemagick ile bunları oluşturmak çok kolaydır.
display "vid:*.jpg"
Bu, mevcut dizin içinde tüm jpg resimlerinin görsel resim dizinini oluşturur. Veya:
display "vid:frog/*"
frog dizini içindeki tüm resimlerinizin görsel resim dizinini oluşturur.
Farenizi(mouse) herhangi bir resmin üzerine getirerek sağ tuşla tıklarsanız
bir menü açılır. Yükle(load) komutuyla resmin tam boyutunu görebilirsiniz:
Bu kuşbakışı resim yaratmanın en kolay yoludur fakat bilgisayarına bağlı
olarak görsel resim dizininin oluşturulması zaman alır. Çok resminiz varsa
fazla miktarda hafızanın harcanması gerekebilir. Bunun için şimdi küçük bir
mini resim oluşturma (htmlthumbnails) yazılımı hazırlayarak (ki böylece daha
az hafıza kullanılabilir) bir sanal doku oluşturacağız. Mini resimlere tıklayarak
orjinal resme ulaşabileceğiz.
Bunun için html kodu aşağıdaki gibidir:
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>
Orjinal dosya file.gif, mini resim ise t_file.gif'tir.
Şimdi mini resim oluşturan bir yazılım ve ardından kendimiz için html kodunu yazacağız.
for f in $* ;do
convert -geometry 80x80 $f t_$f
echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">"
done
Yukarıdaki yazılım, komut satırında belirtildiği gibi tüm resimler üzerinde
bir çevrim oluşturarak mini resimler yaratır ve html kodunu ekrana yazar.
Böylece html kodunu sanal dokumuza kopyalayıp yapıştırabiliriz.
Kabuk yazılımını tamamlamak için yardım metni ve hata kontrolu
ekleriz. Aşağıda yazılımın en son halini bulabilirsiniz.
htmlthumbnails
(html for viewing), htmlthumbnails
(text for download)
Resmin yapısını(format) değiştirmek
Dönüştür komutu yalnızca resmin ebadını değiştirmez aynı
zamanda yapısını da değiştirir. Örneğin gif resmini jpg'ye
veya başka bir şeye çevirebilirsiniz. Bunu yapmak basitçe:
convert image.gif image.jpg
komutuyla olur. Dönüştür komutu, dosya adının uzantısından hangi yapıyı
kullanması gerektiğini bilir.
Elimizde mevcut pek çok resmin yapısını jpg'den gif'e çevirmek için:
for f in $* ;do
if echo "$f" | grep -i "jpg$" > /dev/null ; then
gif=`echo "$f" | sed 's/jpg$/gif/i'`
echo "converting $f to $gif ..."
convert 80x80 $f $gif
else
echo echo "$f is not a jpg file, ignored"
fi
done
Bunun yanında Imagemagick'in bildiği çok miktarda başka yapılar mevcuttur.
Tüm resimlerinize logo koymak
Sağda gördüğünüz gibi farklı resimlere küçük bir logo eklemek istiyoruz.
Bu logonun şeffaf bir gif resmi olması gerekir. Logomuzun, en son resimde küçük
bir imza gibi sağ alt köşeye yerleşmesi gerekir. Aşağıdaki tux resminde bunu görmektesiniz:
Bunu görmek için ne komutu gerekir?
Katıştır(combine) komutu 2 resmi yeni bir resme dönüştürmek
için kullanılabilir. Pek çok seçenek programa nasıl yapılacağını söyleyebilir.
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg
"gravity SouthEast" seçeneği logo.gif'I sağ alt köşeye koyar. "compose Over"
üstüste binmenin olduğu yerde resmin logoyla yer değiştireceğini söyler.
Tam fonksiyonlu kabuk yazılımı elde edebilmek için komutu for çevriminin
içine sokar ve yine yardım metni ve hata kontrolu ekleriz. Aşağıda stampimages
adı altındaki en son kabuk yazılımını görmektesiniz:
stampimages
(html for viewing), stampimages (text for
download)
Resim özellikleri hakkında bilgi alma
Tanımla(identify), resmin tipi(boyutu ve geometrisi)
hakkında detayları gösterir. Bu aşağıdaki gibi yapılır:
identify image.jpg
results in
image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01
Bunun bizim sihirbazımızla ne ilgisi var diye sorabilirsiniz.
Ancak iyi bir sanal doku dizayn edebilmek için daha sayfalar yüklenirken
tüm resimlerin gerçek geometrisini verebilmelisiniz. Html kodu aşağıdaki gibi olacaktır:
<img src="image.jpg" width="340" height="254" alt="[sample picture]">
Resimlerimizin farklı boyutları varsa ve herbirinin yükseklik ve
genişliklerini bilmiyorsak yardım etmesi için tanımla(identify)
komutunu kullanırız. "Tanımla" komutunun çıktısını okuyup bu
satırı yazdıran bir kabuk yazılımı oluştururuz. Resmin geometrisi,
"tanımla" programındaki çıktı sırasının ikinci parametresidir. Bu
parametreyi elde etmek için awk komutunu kullanırız:
identify image.jpg | awk '{print $2}'
results in
340x254
Şimdi bu geometriyi yükseklik ve genişliğe bölmemiz gerekir. Bu da:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'
şeklinde olur ki bu da genişliği verir. Yükseklik ise:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'
Kabuk komutlarına çok fazla yoğunlaşmayın. Eğer henüz
tam olarak anlamamışsanız sadece verildiği şekliyle kabul
edin. Bir sonraki LinuxFocus sayısında kabuk programlaması
üzerine bir makale yayınlanacak. Orada tüm sihrini size
açıklayacağız. Yazılımın son hali aşağıdaki bibi olacaktır:
file=$1
geometry=`identify $file | awk '{print $2}'`
# geometry can be 563x144+0+0 or 75x98
# we need to get rid of the plus (+) and the x characters:
width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'`
height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'`
echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"
kabuk yazılımını tamamlamak için gene yardım metni ve hata kontrolu
ekliyoruz. Aşağıda imgsrcline adındaki en son kabuk yazılımımız bulunmaktadır.
imgsrcline
(html for viewing), imgsrcline (text for
download)
Imagemagick ile oynarken dökümanlar ile gerçek fonksiyonalite
arasında bazen uyumsuzluklar gördüm. Bazı özellikler de tam sabit
değil. Siz yukarıda gösterilen şeyleri uygularsanız gene de çok
faydalı olduğunu göreceksiniz. Yukarıda listelenen fonksiyonlar
çalışır haldedir. Ben ImageMagick-4.2.9 , ImageMagick-5.2.9 ve
ImageMagick-5.3.0 versiyonlarını kullandım ve burada öğrendiğiniz özellikler hepsinde çalışmaktadır.
Umarım ImageMagick ile neler yapabileceğiniz konusunda bir fikre sahip olmuşsunuzdur ve
yazılımları kullanabileceksinizdir veya kendi sihirlerinizi bile yaratmaya başlayabileceksinizdir.
İyi eğlenceler!
Referanslar
- Yükleme(installation): Büyük ihtimalle ImageMagick tüm genel Linuxlarda olduğu gibi hali
hazırda sisteminizde yüklenmiştir. Eğer yüklenmemişse veya yeni versiyonlarını istiyorsanız
http://www.imagemagick.org/
adresinden ulaşabilirsiniz.
- ImageMagick'in araçları hakkında daha detaylı bilgi için man
sayfalarına bakabilirsiniz (örneğin man convert yazın ve dönüştürme
aracı hakkında daha fazla bilgi edinin) veya aynı adlı dökümanı sanal dokulardan okuyun.
- Eğer henüz kabuk programlaması ile aşina değilseniz google'ın bash'i
aramasını sağlayın. Kabuk programlaması hakkında ihtiyacınızı karşılayacak pek
çok eğitici yazı bulabilirsiniz ya da LinuxFocus'un bir sonraki sayısını
bekleyebilir ve kabuk programlaması hakkındaki makaleyi okuyabilirsiniz.