2 Mayıs 2012 Çarşamba

PHP'de Resim İşleme ve Resim Üretimi


PHP programlama dili sadece HTML sayfa çıktısı oluşturmamaktadır. JPEG, GIF, PNG gibi farklı formatlarda resim çıktısı da oluşturabilmektedir. Bu programlama dilinde resim işleme yapabilmek için GD kütüphanesi oluşturmak ve derlemek gerekmektedir.

Resim işlemleriyle değişik formatlı dosyalar (XPM, WBMP) oluşturulabildiği gibi, bu resimler üzerinde işlem de yapılabilmektedir. Görüntü üzerine yazı yazmak, şekil çizmek, botuyunu ayarlamak gibi birçok işlem yapılabilmektedir.


GD Yapılandırması

GD ifadesi, PHP sunucusu üzerinde PHP programlama dilinin grafik kütüphanesinin bulunması ve çalışabilmesi için gerekli olan grafik desteğini belirten bir ifadedir. Bundan dolayı, PHP web server olan apache içerisine GD  (Graphic Device) yapılandırması gerekecektir. Nitekim, apache gibi bir koşullu sunucuya ihtiyaç duyan LINUX / UNIX, WINDOWS gibi işletim sistemlerinde bu yapılandırmaya ihtiyaç duyulacaktır.
GD kurulum ve yapılandırmasına başlamak için şu adrese göz atmak ve php_gd2.dll dosyasını indirmek gerekmektedir.

Daha sonra kendi makinemizde PHP sunucusu içerisinde bulunan php.ini yapılandırma dosyasını açıp aşağıdaki satırları bulmamız gerekmektedir.

; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.
;

Yukarıdaki satırları bulduktan sonra bu satırların altında bulunan ;extension=php_gd2.dll ifadesi aşağıdaki şekilde değiştirilmelidir.

extension=php_gd2.dll

Yukarıdaki değişiklik, ;extension=php_gd2.dll ifadesinin başındaki noktalı virgül (;) yani yorum etiketini kaldırarak bu ifadeyi aktif bir hale getirmekten ibarettir. Bu işlem ile GD kütüphanesi PHP server için yapılandırılmış ve kullanılmaya hazır hale getirilmiştir.


Görüntü Üzerinde İşlem Yapmak

Resimler üzerinde birçok işlem yapılabilmektedir. Resim oluşturmak, resim üzerine yazı yazmak, şekil çizmek, boyama yapmak, arka plan için desen oluşturmak gibi türlü işlem yapma imkanı bulunmaktadır.

Portal sitelerde güvenlik kodu onayı için kullanılan resimler, PHP ’nin GD kütüphanesi kullanılarak yapılan ve bütün bu özellikleri taşıyan görüntülerdir.

Daha önce de söylediğimiz gibi, resim dosyaları üzerinde türlü işlemler yapılabilmektedir. Bunlar yeni bir resim yaratmakla başlayan, resmi yok etmeye kadar süren süreçte gerçekleşen işlemler olarak nitelendirilebilmektedirler.

Görüntü İçin Arka Plan Oluşturmak : imagecreatetruecolor()

Bir görüntü oluşturabilmek için, belirli bir arka plan, yani tuval oluşturmak gerekmektedir. Bunu sağlayan fonksiyon imagecreatetruecolor() fonksiyonudur.


Şekil-1: Oluşturulmuş tuval ekran görüntüsü







Aşağıdaki program çalıştırılıp ekran görüntüsü alındığında şekildeki görüntü elde edilecektir.

 imagecreatetruecolor() fonksiyon kullanımı


<?php
header ('Content-type: image/png');
$goruntu = imagecreatetruecolor(150, 150);
imagepng($goruntu);
imagedestroy($goruntu);
?>



Yukarıdaki parametreler width(150) ve height(150) değerlerini, yani genişlik (en) ve yükseklik değerlerini belirtmek için kullanılmaktadır.

Görüntü Yaratmak : imagecreate()

Oluşturulan tuval için bir de resim görüntüsü yaratmak gerekecektir. Bunun için bazı fonksiyonlara ihtiyaç duyulmaktadır. Bir resmi yaratmak için imagecreate() fonksiyonu kullanılmaktadır. Kullanılan iki parametresi bulunmaktadır.

imagecreate() fonksiyon parametreleri


İmagecreate(genişlik[int], yükseklik[int])



Görüntü Oluşturmak : olustur.php


<?php
        $resim  = imagecreate(250,250);
        header("Content,type: image/png");
        imagepng($resim);
        imagedestroy($resim);
?>



Şekil-2: Görüntü oluşturmak

Yukarıdaki kodlar, görüntü oluşturan PHP kodlarını belirtmektedir.

Bu programın çalıştırılması için oluşturulan görüntünün ekran çıktısı alınması gerekmektedir.


Bunu sağlamak için ise, HTML etiketlerinden biri olan resim çağırma etiketi, <img> kullanılacaktır.




<img src="olustur.php">

Yukarıdaki tek satır kod, goruntu.php dosya adı ile kaydedildikten sonra çalıştırılıp ekran görüntüsü alınır ise, aşağıdaki görüntü elde edilecektir.

Görüntüyü Renklendirmek : imagecolorallocate(), imagefill()

Görüntü tuvali ile birlikte bir görüntü oluşturmayı öğrendik. Oluşturduğumuz bu görüntünün renkli olmasını isteyebiliriz. Bu durumda görüntü renklendirme ile ilgili bazı fonksiyonları kullanmak gerekecektir.

Aşağıdaki örnek, oluşturulan resim dosyasının rasgele olarak renklendirilmesini göstermektedir.           

Görüntüyü renklendirmek


<?php
        $resim  = imagecreate(250,250);
        $rand   = imagecolorallocate($resim, rand(0,255), rand(0,255), rand(0,255));
        imageline($resim, 250, 250, 250, 250, $rand);
        header("content,type: image/png");
        imagepng($resim);
        imagedestroy($resim);
?>



$rand   = imagecolorallocate($resim, rand(0,255), rand(0,255), rand(0,255));

Yukarıdaki fonksiyon parametreleri resim ve renkleri temsil etmektedir. 3 adet renk parametresi olmasının sebebi, RGB (RED, GREEN, BLUE) renk uzayını temsil eden 0 ila 255 arası olan renk tonlamalarının belirlenmesi gerekliliğidir.

Görüntü Üzerine Metin Yazmak : imagestring()

Görüntü üzerine metin yazma işlemi çok sık kullanılan bir yöntemdir. Sıfırdan yaratılmış olsun, dosya yükleme işlemi ile sunucuya gönderilmiş olsun, her türlü resim üzerinde metin yazdırma işlemi gerçekleştirilebilmektedir.

Görüntüye metin ekleme


<?php
header ('Content-type: image/png');
$resim = imagecreatetruecolor(250, 250);
$metin_rengi = imagecolorallocate($resim, 55, 255, 155);
imagestring($resim, 5, 60, 125,  'Phpservisi.com', $metin_rengi);
imagepng($resim);
imagedestroy($resim);
?>





Yukarıdaki program çalıştırılıp ekran görüntüsü alınırsa, aşağıdaki şekil görülecektir.


Şekil-3: Görüntü’ye metin ekleme













imagestring($resim, 5, 60, 125,  'Phpservisi.com', $metin_rengi);

imagestring() fonksiyonu çeşitli parametrelerden oluşmaktadır. Bu parametrelerin anlamları şu şekilde tanımlanabilmektedir:

imagestring(resim, font_size, koordinat düzlemindeki sol X konumu, koordinat düzlemindeki sol Y konumu, karakter katarı, karakter rengi)

Parametreler içinde bulunan resim, imagecreatetruecolor() fonksiyonunun döndürdüğü resim verisidir ve işlem yapılacak resim dosyası olarak da nitelendirilmektedir.

Görüntü Üzerine Çizim Yapmak : imageline()

Bir resim üzerine çizim yapmak bazı durumlarda ihtiyaç duyulabilecek bir işlemdir. Bunu gerçekleştirmek bazı zor hesaplamalar gerektirecektir. Çünkü resim kenarları bir düzlem olarak düşünülmekte ve koordinat eksenleri olan X ve Y konumları önem kazanmaktadır.

Görüntüye çerçeve ve çizgi ekleme


<?php
1:        //Görüntü üzerinde işlemler
2:        $resim  = imagecreate(250,250);
3:        $beyaz  = imagecolorallocate($resim, 255, 255, 255);
4:        $siyah  = imagecolorallocate($resim, 0, 0, 0);
5:        imagefill($resim, 0, 0, $beyaz);
6:        imageline($resim, 0, 0, 250, 250, $siyah);
7:        imageline($resim, 250, 0, 0, 0, $siyah);
8:        imageline($resim, 250, 249, 0, 249, $siyah);
9:        imageline($resim, 0, 250, 0, 0, $siyah);
10:      imageline($resim, 249, 250, 249, 0, $siyah);
11:      header("content,type: image/png");
12:      imagepng($resim);
13:      imagedestroy($resim);
?>


Yukarıdaki program çalıştırılıp ekran görüntüsü alındığında aşağıdaki görüntü elde edilecektir.

Şekil-4: Görüntüye çizgi ve çerçeve ekleme

Yukarıdaki örnek detaylı inceleme sonucu daha iyi anlaşılabilecektir. 2.satır genişliği ve yüksekliği 250 pixel olan bir görüntü oluşturmaktadır. 3. ve 4. satırlar beyaz ve siyah renklere sahip tuval oluşturmaktadır. 5.satır imagefill() fonksiyonu yardımıyla resmi tamamen beyaz renge boyamaktadır.

imagefill() fonksiyon yapısı


imagefill( resim, koordinat düzleminde X konumu, koordinat düzleminde Y konumu, renk )


6.satır, resim üzerinde görülen çizgiyi çizmeyi sağlamaktadır.

7:        imageline($resim, 250, 0, 0, 0, $siyah);//üst çizgi
8:        imageline($resim, 250, 249, 0, 249, $siyah);//alt çizgi
9:        imageline($resim, 0, 250, 0, 0, $siyah);//sağ çizgi
10:      imageline($resim, 249, 250, 249, 0, $siyah);//sol çizgi

Yukarıdaki satırlar, genişlik ve yükselik boyutları 250 pixel olan bir kare için çerçeve çizmek için oluşturulmuş kodlardır.

imageline() fonksiyon yapısı


imageline(resim, ilk noktanın X konumu, ilk noktanın Y konumu, ikinci noktanın X konumu, ikinci noktanın Y konumu, çizginin rengi)



Burada belirtilen imageline() fonksiyon yapısında görülen parametreler ile, yukarıdaki örnekte belirlenen çerçeve ölçüleri karşılaştırıldığında ekran görüntüsünün nasıl oluştuğunu anlamak pek de zor olmayacaktır.



İrdeleme Köşesi

Görüntü üzerine çizim yapmayı öğrendik. Fakat çizim denildiğinde akıllara sadece çizgi gelmemektedir. Dikdörtgen, elips, çizgi ya da poligon gibi şekiller de çizilebilmektedir.



Tablo-1 : Görüntü üzerine çizilen şekil türleri ve fonksiyonlar

Şekil


Fonksiyon

Dikdörtgen
imagerectangle()
Çizgi
imageline()
Elips
imageelipse()
Poligon
imagepolygon()
Yay
imagearc()

Bu yazıda PHP programlama dilindeki resim çizme fonksiyonlarını örnek anlatımlarla göstermeye çalıştım. Umarım işinize yarar. Bir sonraki yazıda görüşmek üzere!



1 yorum: