
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 :)

Bunlara da bir gözat:


ahuah süper. logo mogo çakmayanlar atlar. hosta dikkat
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..
Uyarın için sağol. Rarladığımda sorun çıkartıyormuş zipledim linkide değiştirdim, şimdi iniyor :)
http://pear.php.net/package/Image_3D/
Adresinde bunun kralı var direk 3dsmax dosyalarını 3d gösteriyor , ( bunu yapan insan olamaz ) :D
Evet bu yüzden ben insanların yapabileceği türden ve de aşırı profesyonel olmayan kodları yayınlamayı tercih ediyorum :)
@strefrextor , Rica ederim. Gayet güzel bir uygulama olmuş. Doya doya incelerim artık. :D
Eline sağlık gayet açıklayıcı ve güzel olmuş
Harika olmuş, kodlarına, klavyene sağlık…
Muhteşem ellerinize sağlık (:
Güzel çalışma olmuş bu sayede iconv fonsiyonunu keşfettik :)
Yeni bişeyler keşfetmiş olmanıza sevindim (:
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
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.
Php de sınır yok anlaşılan :D eline saglk (: