Bu makalemizin konusu PHP ile dinamik olarak grafikler oluşturmak.Ama konuya başlamadan önce grafikler üretirken kullanacağımız kütüphaneyi GD kütüphanesini biraz inceleyelim.
GD kütüphanesi başta PHP,Perl,Tcl ve C/C++ olmak üzere birçok programlama dilini destekler.Grafik formatı olarak ise Jpeg(Joint Photographic Experts Group),Png(Portatable Network Graphics) ,Wbmp(Wireless Bitmap) formatlarını destekler.Gif(Graphics Interface Format) formatından ise Lisanslarından dolayı(Gif formatı UNISYS'nin LZW sıkıştırma algoritmasını kullanır. Gif formatında resimler üretebilen programlar LZW Lisansı almak zorundadır) sürüm 1.3'ten itibaren desteğini çekmiştir.Gif yerine daha az yer kaplayan ama animasyon desteği olmayan PNG geçmiştir.GD kütüphanesinin ne olduğunu öğrendiğimize göre nasıl kuracağımızı ve temel fonksiyonlarını öğrenebiliriz.
Aslında GD kütüphanesi PHP 4.0'dan itibaren PHP ile birlikte gelir.Fakat etkinleştirilmemiştir.Benim bilgisayarımda kurulu olan PHP 4.3.3 versiyonuyla birlikte GD 2.0.15 gelmektedir.Şimdi PHP eklentilerini nasıl kuracağımıza bakalım.
Eklentinin DLL dosyasını e:phpextension(PHP'yi E:php klasörüne açtığınızı varsayarak) klasörüne kopyalarız.
php.ini dosyasını herhangi bir metin editörüyle açıp(Windows'unuzun kurulu olduğu dizine bakın) extension_dir satırını bulup önündeki "./" yazısını silip "e:/php/extensions" yazın.
;extension=php_bz2.dll ile başlayan satırı bulup etkinleştireceğimiz eklentinin önündeki ';' işaretini kaldırın.(GD için extension=php_gd2.dll)
Web Sunucunuzu yeniden başlatın
Şimdi GD eklentisi çalışıyor mu bir bakalım.Notepad'i açalım ve <? Phpinfo(); ?> yazıp sunucu dizinimize test.php adıyla kaydedelim.Test.php sayfasını açtığımızda yüklü modüllerin arasında GD'yi görüyorsak işlem başarıyla tamamlanmış demektir
Resim oluşturmak için elimizde iki seçenek vardır
Sıfırdan bir grafik üretmek
Varolan bir grafiği şablon olarak kullanıp üzerine eklemeler yapmak
Şimdi 1. seçenek için en basit örneğimiz olan prizma efektini yapalım
<?
$en= 500;//Genişliği Ayarlıyoruz
$boy = 500;//Yüksekliği Ayarlıyoruz
$resim = imagecreate($en, $boy);//Resmimizi Oluştur
$yesil = imagecolorAllocate ($resim, 25, 215, 155);//Yeşil Rengi oluşturuyoruz
$siyah = imagecolorAllocate ($resim, 0, 0, 0);//Siyah Rengi oluşturuyoruz
imagefill($resim, 0, 0, $siyah);//Resmimizin Arka Planını boyuyoruz
for ($say=20;$say<=500;$say+=20)
{
imageline($resim, 0, 0, $boy, $say, $yesil);//Yeşil çizgimizi çiziyoruz
imageline($resim, 0, 0, $say, $en, $yesil);//Yeşil çizgimizi çiziyoruz
}
Header ("Content-type: image/png");//Üretilecek grafiğin png formatında oluşturmak için önbilgi veriyoruz
imagepng ($resim);//png formatında grafiği oluşturuyoruz
imagedestroy($resim);//Oluşturduğumuz resmi hafızadan siliyoruz
?>
Bu basit efekt için kullandığımız fonksiyonlara bir bakalım
imagecreate($en,$boy):Resmimizi oluşturduğumuz değişkenlerden anlayacağınız üzere grafiğimizin yüksekliğini ve genişliğini belirttik
imagecolorAllocate ($resim,$kirmizi,$yesil,$mavi):Resmimizde kullanacağımız renkleri ayarlıyoruz.Burda rengimizi ayarlamak için 3 temel rengin RGB değerlerini kullanarak tonlama yapıyoruz.
imagefill($resim, x, y, $renk):Resmimizdeki belirli bir bölümü boyamak için kullanıyoruz.Burdaki x ve y boyamaya başlayacağımız bölümün yerlerini $renk ise kullanacağımız rengi belirtir.
imageline($resim,$x1,$y1,$x2,$y2,$renk):Resmimize çizdiğimiz çizginin başlangıç($x1,y1),bitiş(x2,y2) ve rengini tanımlarız($renk).
Header("Content-type: image/png"):Resmimizin formatını tanımlıyoruz.Png yerine yazının başında bahsettiğim grafik türlerinden birini seçebilirsiniz.
imagepng($resim):Resmimizi tarayıcıda görüntülüyoruz.Diğer formatlar için imagejpeg gibi bir fonksiyon kullanabilirsiniz.Eğer oluşan grafiği kaydetmek isterseniz imagepng($resim,"resmim.png") gibi bir kod kullanabilirsiniz
imagedestroy($resim):Resmi ürettikten sonra hafızadan siliyoruz.
Resim üzerine çizgiler çizmeyi öğrendik.Peki düğme hazırlamak için üzerine nasıl yazı yazabiliriz.Basit bir örnek olarak üzerinde mutasyon.net yazan bir düğme yapalım
<?
$resim = imagecreate(120, 50);
$kirmizi = imageColorAllocate ($resim, 255, 0, 0);
$beyaz = imageColorAllocate ($resim, 255, 255, 255);
ImageFill($resim, 250, 250, $kirmizi);
imagestring($resim,4,10,15,"mutasyon.net",$beyaz);//Resmimize yazımızı ekliyoruz
Header ("Content-type: image/png");
ImagePng ($resim);
ImageDestroy($resim);
?>
Önceki örnekten farklı olarak burada imagestring fonksiyonunu kullandık.Bu fonksiyonu imagestring($resim,$yazi_boyutu,$x,$y,$renk) şeklinde kullanırız.
Şimdi 2. Seçeneğimiz olan varolan bir grafiği şablon olarak kullanıp üzerine eklemeler yapmayı öğrenelim.Ama ilk önce kendimize şablon olarak 100×100 pixel boyutlarında bir grafik hazırlayalım ve png formatında deneme ismiyle kaydedelim.(Eğer herhangi bir resim işleme programınız yoksa yukardaki örneği kaydedebilirsiniz)
<?
$resim=imagecreatefrompng("deneme.png");//Deneme.png resmini alıyoruz
$rboy=imagesx($resim);//Resmimizin boyunu ölçüyoruz
$ren=imagesy($resim);//Resmimizin enini ölçüyoruz
$siyah=imagecolorallocate($resim,0,0,0);//Siyah rengi ekliyoruz
imagestring($resim,5,10,45,'Sychorax',$white);//Resmimize Yazımızı Ekliyoruz
header("Content-type: image/png");//Resmin Png formatında olacağını belirtiyoruz
imagepng($resim);//Resmi tarayıcıya gönderiyoruz
imagedestroy($resim);//Resmimizi hafızadan siliyoruz
?>;
Burada farklı olarak 3 tane fonksiyon kullandık.Bunlar
imagecreatefrompng("deneme.png"):Şablonumuzun deneme.png olacağını belirttik.
imagesx($resim):Kullandığımız resmin boyunu ölçtük.
imagexy($resim):Kullandığımız resmin enini ölçtük.
GD Kütüphanesi ile ürettiğimiz resimleri img etiketinde tanımlayıp kullanabiliriz
Örneğin <img src=button.php> Gibi bir ifade kullanabiliriz
kaynak: ordan burdan