January, 2010 Arþivi
PHP ile resim üstüne yazı yazdırmak
Gonderen: Ersin tarih: Jan.31, 2010, Kategori: Php Web Programlama
Uzun zamandır yazmıyorum bloguma, bugün bunun acısını çıkarırcasına , yazmak isteyip de, vakit bulamadığım konular üzerine yazıyorum ![]()
Bildiğiniz veya artık bundan sonra bileceğiniz gibi, php ile resim işlemleri de yapabilmekteyiz. PHP nin resim işlemleri için birkaç eklentisi var. Fakat ben örneğimde GD kütüphanesini baz alacağım.
Burdaki amacımız elimizde bulunan bir resim üzerine istediğimiz bir yazıyı yazdırabilmek. Bunu yapabilmek için GD eklentimizi kurmamız gerekir. GD kütüphanesini kurduktan sonra yazacağımız birkaç satırlık kod ile rahatlıkla istediğimiz şeyi gerçekleştirebileceğiz :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // resmimizi oluşturuyoruz $resim=imagecreatetruecolor(200,50); // resmimizi boyayacağımız rengi oluşturuyoruz $renk = imagecolorallocate($resim, 176,196,222); // resmimizi boyuyoruz imagefill($resim, 0,0, $renk); // yazı rengimizi belirtiyoruz $yaziRengi = imagecolorallocate($resim, 0,0,0); // yazımızı resmin üstüne yazıyoruz imagestring($resim, 5, 20, 50/3, 'www.ersindogan.com', $yaziRengi); // tarayıcıya dosyamızı algılaması için direktif veriyoruz header('Content-type: image/png'); // ve sonucu çıktılıyoruz imagepng($resim); imagedestroy($resim); |
Burada ek olarak bahsedeceğim şey iamgestring işlevi. Aslında bu işlev tam olarak yazımızın konusu, yani resim üzerine yazı yazmamızı sağlayan işlev.
Bu işlevdeki ilk parametre üzerine yazı yazılacak resimdir .
İkinci parametre yazı yazmak için kyllanacağımız font tipini belirtiyoruz. 1 den 5 e kadar latin2 kodlamalı yerleşik yazı tiplerini seçebilir veya imageloadfont metodu ile kendi fontumuzu kullanabiliriz.
Üçüncü ve dördüncü parametreler yazının koordinatlarını (x,y) belirtmek için kullanılır.
Beşinci parametre resmi üzerine yazılacak metin.
Altıncı parametre ise yazı rengini belirler.
Yuarıdaki kodun çıktısı aşağıdaki gibi olacaktır :

Eğer kodları aşağıdaki biçimde değiştirisek :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // rengimizi oluşturuyoruz $resim=imagecreatetruecolor(50,250); // resmimizi boyayacağımız rengi oluşturuyoruz $renk = imagecolorallocate($resim, 176,196,222); // resmimizi boyuyoruz imagefill($resim, 0,0, $renk); // yazı rengimizi belirtiyoruz $yaziRengi = imagecolorallocate($resim, 0,0,0); // yazımızı resmin üstüne yazıyoruz imagestringup($resim, 5, 10, 220, 'www.ersindogan.com', $yaziRengi); // tarayıcıya dosyamızı algılaması için direktif veriyoruz header('Content-type: image/png'); // ve sonucu çıktılıyoruz imagepng($resim); imagedestroy($resim); |
Bu sefer de aşağıdaki gibi bir çıktı alırız

Aslında beni en çok uğraştıran, ama çözümü gözümün önünde duran, resim üzerine yazılan yazının saydamlığını ayarlayabilme konusuna bir sonraki yazıda değineceğim.
Buradaki örnekleri geliştirerek kendinize uygun çözümler oluşturabilirsiniz. Hoşça kalın
iconv ile karakter kodlama
Gonderen: Ersin tarih: Jan.30, 2010, Kategori: Php Web Programlama
BirçoÄŸumuz ya kullanmışızdır, ya da gerçekten çok ihtiyaç duyup çözüm aramışızdır. BaÅŸka bir karakter setinde olan metni diÄŸer bir karakter setine geçirmek. Bunun için çok kolay bir yöntem var “iconv”.
iconv phpnin karekter setleri arasında çevrim yapmaya olanak veren yararlı bir fonksiyonu.
1 | string iconv(string $kodlamadan,string $kodlamaya,string $metin) |
biçiminde kullanılır. iconv kullanırken dikkat edilmesi ve göz önünde bulundurulurması gereken en önemli nokta, karakter kümesinin karşılığını bulamadığı karakterde ne yapacağını belirtmektir.
Şöyle ki : iconv çevrim yaparken diÄŸer karakter setinde bulamayacağı karakterler vardır ( örneÄŸin Türkçe de μ δ benzeri karakterler yoktur), bu tür karakterlere denk geldiÄŸinde ön tanımlı olarak bu karakterden sonrasını es geçer ve Notice verir. Bunun önüne geçebilmek için çevrim yapılması istenen karakter setini belirtirken “//TRANSLIT” kelimesinin eklememiz gerekir. Böylece o karakter setinde olmayan, ama karşılığı olan karaktere çevrilir .
PHP kendi sitesinde verdiği örnek üzerinden gidersek :
1 2 3 4 5 6 | $text = "'€' simgesi Euroya aittir"; echo 'Original : ', $text, PHP_EOL; echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; |
Çıktısı aşağıdaki gibi olacaktır
Original : ‘€’ simgesi Euroya aittir
TRANSLIT : ‘EUR’ simgesi Euroya aittir
IGNORE : ” simgesi Euroya aittir
Notice: iconv(): Detected an illegal character in input string in .\index.php on line 6
Plain : ‘
Notice: iconv(): Detected an illegal character in input string in .\index.php on line 7
iconv çok yararlı bir fonksiyondur, karakter setleri arasında çevrim yapmak istediğinizde işinizi oldukça kolaylaştıracak bir fonksiyondur.
Elimden geldiğince kullanımına dair birşeyler paylaşmak istedim. işinize yaraması umudu ile, hoşça kalın.
lighttpd’nin dayanılmaz hafiliÄŸi
Gonderen: Ersin tarih: Jan.30, 2010, Kategori: Php Web Programlama
Apache’den gayrı sunucu bilmezdim, taaki lighttpd ye iÅŸim düşene kadar. Ve gördüm ki gerçekten adı kadar hafif bir sunucu imiÅŸ. Sadece 762 kb olan bu sunucuyu kurup , php ile bağını kurmak hiç de zor olmadı. Kendi sitesinden indirdiÄŸiniz dosyayı bir klasöre açtıktan sonra geleneksel kurulum yöntemleri ile kuruyoruz : Dosyaları açtığımız dizine gidip ;
1 2 3 | ./configure make make install |
diyerek kurulumu tamamlıyoruz. Geleneksel kuruluma ek olarak, istediğim klasöre kurulabilmesini sağlayabilmek için :
1 2 3 | ./configure --prefix=/home/ersin/lighttpd make make install |
demek yetiyor. Bundan sonra lighttpd yi ayarlayabilmek için gerekli ayar dosyasını oluşturmaya geldi sıra. Kurulum işlemi tamamlandığında lib,sbin ve share klasörleri oluşturacaktır ( eğer yukarıdaki prefix parametresini kullanıp farklı bir dizine kurdurduysanız) . Kurulum yaptığımız lighttpd klasörüne giderek burada www klasörü oluşturalım.
Kurulumu yukarıdaki komut satırındaki kuruluma göre , farklı bir dizine yapılmış kurulum olduğunu kabul ederek devam edelim.
sbin klasörüne girerek lighttpd.conf adında bir dosya oluşturalım. Bu dosyanın içerisine girerek şu satırları yazalım :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | server.document-root = "/home/ersin/lighttpd/www" server.port = 8080 server.modules = ( "mod_rewrite", # "mod_redirect", # "mod_alias", # "mod_access", # "mod_cml", # "mod_trigger_b4_dl", # "mod_auth", # "mod_status", # "mod_setenv", "mod_fastcgi", # "mod_proxy", # "mod_simple_vhost", # "mod_evhost", # "mod_userdir", # "mod_cgi", # "mod_compress", # "mod_ssi", # "mod_usertrack", # "mod_expire", # "mod_secdownload", # "mod_rrdtool", # "mod_accesslog" ) index-file.names = ( "index.php","index.html" ) mimetype.assign = ( ".html" => "text/html", ".txt" => "text/plain", ".jpg" => "image/jpeg", ".png" => "image/png" ) |
Yuarıdaki kodlar üç aşşağı beş yukarı anlaşılır şeyler. Ama yine de tek tek değinelim.
server.document-root sunucumuzda yayınlanacak olan dosyalar için kök klasörü işaret eder. Bu klasöre atılan dosyaya web den erişilebilir (bunu kendi kurulumunuza göre değiştirin) .
server.port sunucumuzun çalışacağı port. Genelde 80 dir ama, zaten bir sunucunuz olduğunu düşünerek lighttpd yi denerken muhtemel bir problemden uzak tutmak için 8080 girdik.
index-file.names sunucumuzun kök klasöre eriştiğinde bakacağı index dosyasını belirlememizi sağlar.
mimetype.assign uzantılar ile MIME tipi ilişkilendiriyoruz.
Şimdi sıra geldi php yi tanıtmaya. Lighttpd de PHP yi kurabilmek için php-cgi kurmamız gerekmekte.
Ben ubuntu kullandığım için ubuntuya göre kurulumu anlatacağım.
1 | apt-get install php5-cgi |
gibi tek satır kod ile php5-cgi kurduktan sonra lighttpd.conf a aşağıdaki satırları ekliyoruz
1 2 3 4 5 6 7 8 9 10 11 | fastcgi.server = ( ".php" => (( "socket" => "/tmp/php-fastcgi.socket", "bin-path" => "/usr/bin/php-cgi", "max-procs" => 10, "bin-environment" => ( "PHP_FCGI_CHILDREN" => "10", "PHP_FCGI_MAX_REQUESTS" => "500" ), "broken-scriptfilename" => "enable" )) ) |
Bu satırları da ekledikden sonra sıra geldi lighttpdyi çalıştırmaya. Tabi bundan önce www dizinimizde index.php dosyası oluşturup içerisine
1 | phpinfo(); |
yazarak kaydetmeliyiz. Böylece php kurulumunu test edebiliriz.
Hadi lighttpd yi çalıştıralım, ilk önce konsoldan kurulumu yaptığımız dizindeki sbin klasörüne giriyoruz. Burda :
1 | ./lighttpd -D -f lighttpd.conf |
yazarak lighttpd yi çalıştırıyoruz ( lighttpd.conf dosyasını kolaylık olsun diye sbin klasörünün içerisinde oluÅŸturmuÅŸtum ) . Buradaki “D” parametresi lighttpd nin arka plana geçerek orda çalışmasını engeller. Böylece komut satırından “CTRL+C” ile iÅŸlevi sonlandırdığınızda lighttpd çalışmayı durdurur, “D” parametresini eklemezsek “CTRL+C” ile lighttpd yi durduramayız. “f” parametresi hangi config dosyasını kullanacağımızı belirtmek için.
Bu komutu çalıştırdıktan sonra
“2010-01-30 18:10:51: (log.c.166) server started”
benzeri bir çıktı verecektir. Bu da lighttpd nin çalıştığı anlamına gelir. Artık tarayıcı ekranından http://localhost:8080 dedikten sonra php bilgisi dökülecektir ekrana.
İlerleyen zamanlarda lighttpd ile ilgili tecrübelerimi burada paylaşmaya çalışacağım. Güzel günler dileği ile, hoşça kalın.
