Kabukta; resimler üzerinde sihir yapın

ArticleCategory:

Graphics

AuthorImage:

[Photo of the Author]

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:

[Illustration]

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:

[visual image directory]


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. [linuxfocus stamp]

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:

[tux with logo]

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