Serbest bir PHP programcısı olarak ileri görüşlerimden birisi; PHP ile web tabanlı yapılamayacak hiç birşey yok. Kimine abartı kimine de mantıksız gelsede ben şu ana kadar bu düşünceler ile birçok sıradışı projelere adım attım ve koştum. İşte şimdi de bir başka sıradışı projem; PHP ile 3D yazılar oluşturma. 3 parçadan oluşacak(ana sayfa, resmin oluşturulacağı sayfa ve font) olan bu minik projemiz için PHP’nin yazı için kullanacağı bir fonta ihtiyacımız var ben bunun için kalın “Tahoma” seçtim, sizde kendi zevkinize göre bunu değiştirebilrisiniz ama düz ve sade fontlar olması 3 boyutlu gösterimi daha etkili olmasını sağlar. Hadi başlayalım.

İlk olarak html ile bir ön form hazırlayalım. Bu forma bir tane yazı kutucğu(text) koyalım ve ardından formu da resim.php sayfasına postlanmasını ayarlayalım. Bu yaptığımız sayfayı index.html olarak alalım ve bir kenara koyalım. Şimdi gelelim resim.php ye;

PHP üzerinden ilk olarak sayfanın headerini resime çevireceğiz ve PNG yapacağız. Daha sonra index.html den gelecek olan form daki yazıyı bir değişkene atıyacağız. Fakat resimde türkçe karakter problemi yaşamamak için iconv() fonksiyonu ile gelen veriyi UTF-8′e çevirmemiz gerekiyor. Bu ön işlemlerden sonra sayfamızın dinamik kısmına geçebiliriz. Tuvalimizin genişliğini harf uzunluğunun 45 ile çarpımından yaptık. Bu sayede ne kadar uzun bir yazı girilirse genişlik o kadar uzar. Bazen harflerin kısa olması tuvalde gereksiz uzatmalar yapsa bile bu sorunu çok önemli bulmuyorum.

header ("Content-Type: image/png; charset=utf-8");
$yazi = iconv("ISO-8859-9","utf-8",$_POST['yazi']);
 
$genislik = (strlen($yazi) * 45) + 15;
$tuval = imagecreatetruecolor($genislik, 115);

Ardından tuvalimizde kullanacağımız renkleri belirliyoruz. Arkplan için beyazı, 3 boyutlu yazının üst katmanı için normal tonda bir turuncuyu ve derinlik hissi yaratması için de kullandığımız normal rengin koyu tonu. Ve 2 gri renk belirliyoruz bunlar 3 boyutlu yazımızın gölgesinde kullanacağız. Tuvalimizi beyaza boyuyoruz ve kullanacağımız fontu belirtiyoruz. Ben yukarıda da belirttiğim gibi kalın “Tahoma” kullandım. Bunu dosyaların içine atarken ismini “font.ttf” olarak değiştirdim. Sizde resim.php dosyasının yanına fontunuzu attığınızda ismini font değişkeni üzerinden değiştirmeyi unutmayın.

$beyaz = imagecolorallocate($tuval, 255, 255, 255);
$normal_renk = imagecolorallocate($tuval, 255,130,47);
$koyu_renk = imagecolorallocate($tuval, 206,106,38);
$beyaz = imagecolorallocate($tuval, 255, 255, 255);
 
$gri = imagecolorallocate($tuval, 200,200,200);
$gri2 = imagecolorallocate($tuval, 250,250,250);
 
imagefill($tuval, 0, 0, $beyaz);
$font = 'font.ttf';

İşte şimdi yazılarda 3 boyutu oluşturduğumuz kısma geldik. Burada ki mantık yazıyı üst üste 5 kez daha yazmak fakat üst üste yazdığımız bu 5 yazının bulunduğu konumu her birinde bir piksel aşağıya kaydırıyoruz. Bu kaydırdığımız klon yazılarda da derinlik hissi yaratması içinde seçtiğimiz rengimizin koyu tonunu kullanıyoruz. Ve 2 gri renk ile yazının en altına gölge ekliyoruz. 1 derecelik bir açı yaparak da yazının daha da derinlik kazanmasını sağladım. Ve işte hepsi bu kadar :)

imagettftext($tuval, 41, 1, 17, 77, $gri2, $font, $yazi);
imagettftext($tuval, 41, 1, 16, 76, $gri, $font, $yazi);
imagettftext($tuval, 41, 1, 15, 75, $koyu_renk, $font, $yazi);
imagettftext($tuval, 41, 1, 14, 74, $koyu_renk, $font, $yazi);
imagettftext($tuval, 41, 1, 13, 73, $koyu_renk, $font, $yazi);
imagettftext($tuval, 41, 1, 12, 72, $koyu_renk, $font, $yazi);
 
// En son yazdırılacak olan ise normal renk tonunda olan yazımız.
imagettftext($tuval, 41, 1, 11, 71, $normal_renk, $font, $yazi);
 
// Ve gösterme zamanı
imagepng($tuval);
imagedestroy($tuval);

Olmuş pişmiş ve geliştirilmiş haline bakmak için buraya, kodlarını indirmek içinde buraya.

Hadi kolay gelsin :)

Etiketler: , , , , , , , , , , ,

Bunlara da bir gözat:

"PHP ile 3D yazılar" 14 yorum »

  1. ahuah süper. logo mogo çakmayanlar atlar. hosta dikkat

    Nucro tarafından — 24 Ağustos 2008 @ 20:53

  2. Musa ellerine sağlık. Güzel olmuş. :) Bu arada dosyayı indirmeye çalıştım fakat inmedi yazılar çıktı. Böyle bir sorunla karşılaşan arkadaşlar indirme linkine sağ tıklayıp farklı kaydet derse indirebilirler..

    Web Öğrencisi tarafından — 24 Ağustos 2008 @ 21:33

  3. Uyarın için sağol. Rarladığımda sorun çıkartıyormuş zipledim linkide değiştirdim, şimdi iniyor :)

    Strefrextor tarafından — 24 Ağustos 2008 @ 23:48

  4. http://pear.php.net/package/Image_3D/

    Adresinde bunun kralı var direk 3dsmax dosyalarını 3d gösteriyor , ( bunu yapan insan olamaz ) :D

    coyote tarafından — 25 Ağustos 2008 @ 00:00

  5. Evet bu yüzden ben insanların yapabileceği türden ve de aşırı profesyonel olmayan kodları yayınlamayı tercih ediyorum :)

    Strefrextor tarafından — 25 Ağustos 2008 @ 10:36

  6. @strefrextor , Rica ederim. Gayet güzel bir uygulama olmuş. Doya doya incelerim artık. :D

    Web Öğrencisi tarafından — 25 Ağustos 2008 @ 10:39

  7. Eline sağlık gayet açıklayıcı ve güzel olmuş

    Tamer tarafından — 25 Ağustos 2008 @ 10:47

  8. Harika olmuş, kodlarına, klavyene sağlık…

    iLkerAksoY tarafından — 26 Ağustos 2008 @ 22:52

  9. Muhteşem ellerinize sağlık (:

    Burak tarafından — 06 Eylül 2008 @ 00:05

  10. Güzel çalışma olmuş bu sayede iconv fonsiyonunu keşfettik :)

    ertan tarafından — 15 Eylül 2008 @ 23:21

  11. Yeni bişeyler keşfetmiş olmanıza sevindim (:

    Strefrextor tarafından — 16 Eylül 2008 @ 17:59

  12. scriptte hata var, her karakterin 45px olduğunu varsayıyorsunuz…
    ama uzun bir cümle yazınca resmin sağ tarafında gereksiz fazlalıkta boş alan kalıyor…

    $genislik = (strlen($yazi) * 45) + 15;
    $tuval = imagecreatetruecolor($genislik, 115);

    bu kısma bir çare bulmanız gerek..

    ayrıca ben mi şaşı görüyorum yoksa yazı yukarı doğru mu gidiyor gittikçe..
    rotasyon kodu felan görmedim halbuki :S

    noname tarafından — 19 Eylül 2008 @ 19:29

  13. Evet yukarı doğru gidiyor 1 derece eğim yaptım;
    imagettftext($tuval, 41, 1, 17, 77, $gri2, $font, $yazi);
    burdaki 1 lere dikkat edersen, onlar rotasyon oluyor. Bahsettiğin diğer sorunda doğru ama ben mantıken pek sorun saymadım. Çünki böyle bir sistemle up uzun birşey yazmak biraz mantıksız geldi, bu yüzden pek önem göstermedim haklısın.
    Şöyle yapabiliriz; if ile koşul koyarak karakter sayısı 10 ile 20 arasındaysa genişliği şu kadar yap 20 ile 30 sa şu kadar yap gibi. Bu soruna bir çok farklı yöntemle çözüm sağlayabiliriz.

    Strefrextor tarafından — 19 Eylül 2008 @ 19:41

  14. Php de sınır yok anlaşılan :D eline saglk (:

    Burak tarafından — 22 Kasım 2008 @ 02:08

Bu yazıdaki yorumlar için RSS beslemesi. Geri İzleme URL'si.

Yorum yapın

strefrextor, wp, skd ve teyt.org ©2009 - sitemap - 9 x 39 + 1 = 352