PHP ile Resim Üzderine Yazı Ekleme ve Kaydetme - PHP Webmaster bilgi bankası, knowledge base Webmaster Araçları

AnaSayfa > PHP > PHP ile Resim Üzderine Yazı Ekleme ve Kaydetme
Kategori: PHP
Gönderen: Admin
Tarih: 2008-11-07
Puan: 0   Puan:0 | Katılımcı:0 | Katılımcı : 0
Okunma: 3454
  
 
1 puan 2 puan 3 puan 4 puan 5 puan 6 puan 7 puan 8 puan 9 puan 10 puan

--------------------------------------------------------------------------------

Şimdi öncelik olarak verilerimizi gondereceimiz bir form'a ve form öğelerine ihtiyacımız var.

form.html

PHP Kodu:



Kod Çizelgesi Kod Dili: html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />
</head>
<body>
<form action="yukle.php" method="post" enctype="multipart/form-data" name="resimyukle">
<input type="file" name="resim" id="resim" />
<input type="submit" name="yukle" value="yükle" />
</form>
</body>
</html>


bu şekilde formumuzu hazırladık.
İsterseniz form'un hazırlanması ile ilgili bir kaç anlatım yapayım.
ilk olarak html kodumuzu başlattık ve head tagları arasına sayfamızın dil yapısını ve tipini tanıttık yani dil olarak (iso-8859-9 (türkçe)) tip olarakta (content="text/html (html)) ve <form etiketiyle formumuzu başlattık. ve buna muteakip hemen formun işlemden sonra "Submit" yapılacağı adresi Action ile belirledik (yukle.php). akabinde method'unu POST olarak belirledik Ayrıca GET ile belirlesek verilerimiz URL'de gözükecektir. bu method argumanlarını konumuz ile dolaylı yonden ilgili olsa bile direct ilgili olmadığı için es geçiyor ve sonraki işlemleri anlatıyorum. enctype bunu multipart/form-data bunu belirtmemizin sebebi eğer bu formdan herhengi bir istemci-sunucu ile ilgili bir öğe göndererek temp klasorunu kullanacak.
sonrasında bir input oluşturduk ve tipi file olarak belirledik. adınada resim dedik isim kısmını ilerde kullacağımız _FILES değişkeni için verdik.
sonrasında bi submit tipi ile bir gonder butonu oluşturduk bu işlemimizi ve action'unun gideği adrese verileri alıp yonlenmemiz için lazımdır.

şimdi Form işlemini anladıktan sonra yukle.php ve asıl konumuz olan işlemlere gelelim.
buradada aynı şekilde tek tek anlatmaya gayret edeceğim.

yukle.php


PHP Kodu:


Kod Çizelgesi Kod Dili: php
<?php

$tr = array("ç","Ç","Ğ","ğ","ı","ö","Ö","ş","Ş","ü","Ü","','","İ","(",")","\"","/","','","I"," ","?","%","!","'","+","&","=",",","{","}","[","]","æ","Æ","@","ß","®","^^","#",">","<","£","$","½",";","*","|","^","~","'\'");
$trtemiz = array("c","C","G","g","i","o","O","s","S","u","U","-","i","-","-","-","-","-","i","-","i","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-");
$yazi = "Semih VURAL";
$alinan_yer = $_FILES["resim"]["tmp_name"];
$alinanin_adi = $_FILES["resim"]["name"];
$dosyaadiyeni = str_replace($tr,$trtemiz,$alinanin_adi);
$rastgele_rakam=md5(rand(1111111,999898989));
$resim1 = $rastgele_rakam."-".md5(time()).$dosyaadiyeni;
$kaydedilecek_yer = "resimler/".$resim1;
move_uploaded_file($alinan_yer,$kaydedilecek_yer);
$resmimiz = $_FILES["resim"]["type"];
switch($resmimiz) {
case 'image/jpeg':
$resmimiz = imagecreatefromjpeg($kaydedilecek_yer);
break;
case 'image/png':
$resmimiz = imagecreatefrompng($kaydedilecek_yer);
break;
case 'image/gif':
$resmimiz = imagecreatefromgif($kaydedilecek_yer);
break;
default:
echo "resim tipi değil falan filan yada header(location: sdasdasd.php)";
break;
}

$neresine_yazilsin_ust = "25";
$neresine_yazilsin_sol = "100";
$yazi_tipi = "yazitipi.ttf";
$yazi_boyutu = "15";
$yazi_dongusu = "0";
$kalitesi = "100";
$beyaz_renk = imagecolorallocate($resmimiz, 255,255,255);
imagettftext($resmimiz, $yazi_boyutu, $yazi_dongusu, $neresine_yazilsin_sol, $neresine_yazilsin_ust, $beyaz_renk, $yazi_tipi, $yazi);
imagejpeg($resmimiz,$kaydedilecek_yer,$kalitesi);
?>

Evet arkadaşlar bayağı bi yoruldum asıl şimdi başlıyor sıra ile anlatayorum işlemleri....

1. Satır : $tr = array("ç","Ç","Ğ","ğ","ı","ö","Ö","ş","Ş","ü","Ü", "','","İ","(",")","\"","/","','","I"," ","?","%","!","'","+","&","=",",","{","}","[","]","æ","Æ","@","ß","®","^^","#",">","<","£","$","½" ,";","*","|","^","~","'\'");
Buarada $tr adlı değişkenimize Türkçe karakterleri ve hemen hemen aklıma gelen bütün ıvır zıvır karakterleri yazdım.

-------------------------------------------------------------

2. Satır : $trtemiz = array("c","C","G","g","i","o","O","s","S","u","U", "-","i","-","-","-","-","-","i","-","i","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-","-");
Buarada $trtemiz adlı değişkenimize Türkçe karakterleri ve hemen hemen aklıma gelen bütün ıvır zıvır karakterlerin karşılığını alacak yani değiştirecekleri yazdım.

---------------------------------------------------------------------

3. Satır : $yazi = "Semih VURAL";
burada ise malumunuz resimin üzerine gelecek yazıyı yazıyor

-------------------------------------------------------------------------

4 Satır : $alinan_yer = $_FILES["resim"]["tmp_name"];
burada files super global değişkeni ile aldığımız resmimizin tmp_name sini yani geçici adını alıyoruz ve $alinan_yer adlı değişkenimize atıyoruz.

-------------------------------------------------------------------

5. Satır : $alinanin_adi = $_FILES["resim"]["name"];
burada, files super global değişkeni ile aldığımız resmimizin adınızı alıyoruz. ve $alinanin_adi adlı değişkene referans amaçlı atıyoruz.

--------------------------------------------------------------------------

6. Satır : $dosyaadiyeni = str_replace($tr,$trtemiz,$alinanin_adi);
burada $dosyaadiyeni adlı değişkenimizi başlattık ve değer olarak str_replace ile $tr,$trtemiz,$alinanin_adi gibi argumanlar ile işledik.
bunu biraz açıklamak istiyorum.
buradaki işlem şudur : $tr adlı değişkendeki bütün değişkenler sırası ile $trtemiz adlı değişkenimizle değiştirilmekte (sıraı ile dedim çunku array fonksiyonu var ikisindede) sonrada değişen bu değer $alinanin_adi adlı değişkenin içindeki bütün karakterleri kontrol eden ve uyuşan varsa hemen değiştirir.

---------------------------------------------------------------

7. Satır : $rastgele_rakam=md5(rand(1111111,999898989));
burada $rastgele_rakam adında bir değişken oluşturduk ve 1111111 ile 999898989 arası sayfa her yenilendiğinde bu sayıların arasında bir rakam oluştur dedik (223232323 gibi...) ve sonrada bu oluşan rakamı md5'e çevirdik. Çıkan sonuç 32 bitlik bir şifreleme algoritmasıdır.

------------------------------------------------------------------------

8. Satır : $resim1 = $rastgele_rakam."-".md5(time()).$dosyaadiyeni;
burada, $resim1 isimli bir değişken başlattık ve değerleri ise şunlar :
$rastgele_rakam, md5(time()) ve $dosyaadiyeni
bunların hepsini birleştir ve başlattığımız $resim1 adlı değişkene ata.
Bu arada dikkat ederseniz time() ıda md5 işe aldık time() şimdiki zamanı saniye cinsinden verir. Biliyorum abarrtık bu şifreleme işini

----------------------------------------------------------

9. Satır : $kaydedilecek_yer = "resimler/".$resim1;
burada $kaydedilecek_yer adlı değişkenimizi oluşturduk ve değer olarak resimler/".$resim1 değerini verdik burada resimler klasorunu ifade eder yani resmin sitemizdeki kaydedileceği dizin. .$resim1 değikeni ise yukarda belirttiğimiz referans değişkenin içeriğidir.
Tabiiki resmin adıda az evvel oluşturduğumuz md5'ler ile birlikte ve resmin orginal temizlenmiş hali ile kaydedecek.

----------------------------------------------------------------------

10. Satır : move_uploaded_file($alinan_yer,$kaydedilecek_yer);
burada, move_uploaded_file() fonksiyonu yardımı ile resmi temp dosyasına attığımız yerden (yani $alinan_yer) alıyoruz ve $kaydedilecek_yer adlı değişkenimizde yere kaydediyoruz. Ayrıca copy() Fonksiyonunuda kullanabilirdik.

---------------------------------------------------------------------

11. Satır : $resmimiz = $_FILES["resim"]["type"];
burada, yuklediğimiz resmin tipini type argumanı sayesinde buluyoruz. (tabii ben burada image/jpeg vs vs.. diye aldım yani direck sunucu taraf tanımlama) ve $resmimiz adlı değişkene atadım.

----------------------------------------------------------------

12. Satır : switch($resmimiz) {
burada switch case kontrol yapısı başlattık. Switch case PHP'nin kontrol yapısı vardır. Tıpkı "if else" ve "?" olduğu gibi.

-----------------------------------------

13, 14 ,15. Satırlarımız : case 'image/jpeg':
$resmimiz = imagecreatefromjpeg($kaydedilecek_yer);
break;

ilk olarak case ile belirti yaptık ve dedikkki eğer yuklenen resmin tipi image/jpeg ise imagecreatefromjpeg($kaydedilecek_yer); bu fonksiyon çalışsın bu fonksiyon ise imagecreatefromjpeg olduğu için eğer resim jpeg ise bu çalışacak. dikkaet ederseniz sonunda fromjpeg var.
ve eğer evet gelen resim jpg ise break yapısı ile sonraki işlemlere geçmeden işlemi bitir dedik. yani sonraki caselere kadar inmeyip sunucuyuda boşa yormamış olacak. (aslında if-else yapıı ile örnek verecektim ama switch case hakkında az insanların bilgisi var diye seçtim bunu)

-----------------------------------------------------------------
16, 17, 18. Satırlarımız : case 'image/png':
$resmimiz = imagecreatefrompng($kaydedilecek_yer);
break;

burada ise yine aynı şekilde yukarda anlattığım işlemin aynısı işliyor ama tek farkı (olması gereken fark) burada png kontrolu yapıyoruz. dikkat ederseniz sonunda fromjpng var.

----------------------------------------------------------------------

19, 20, 21. Satırlarımız : case 'image/gif':
$resmimiz = imagecreatefromgif($kaydedilecek_yer);
break;
aynı işlem ama farkımız gif sonunda fromjgif var.

----------------------------------------------------------

22, 23, 24. Satırlarımız : default:
echo "resim tipi değil falan filan yada header(location: sdasdasd.php)";
break;

Evet, burada ise eğer bu saydıklarımızın yani jpg, png ve gif yoksa default yardımı ile şu işlemi yap dedik. (echo yada yonlendir yada return FALSE olarakta belirleyebilirdik.)

--------------------------------------------------------------------

25. Satır : $neresine_yazilsin_ust = "25";
burada artık resmimiz ve GD kütüphanesi ile ilgili işlemler boy göstermekte...
$neresine_yazilsin_ust dediğim yerde değer olarak 25 demişim bu şu demek oluyor "yazı resmin ust tarafında tam olarak nerye yazılsın"
eğer bunu 100 yaparsanız farkı göreceksiniz.

-----------------------------------------------------------------------

26. Satır : $neresine_yazilsin_sol = "100";
burada ise resmin sol taraftaki farkını belirtmişim yani soldan gelirken yazı soldaki boşluk diyebiliriz. ve değişken olarak $neresine_yazilsin_sol değişkenini atadık.

--------------------------------------------------------------------

27. Satır : $yazi_tipi = "yazitipi.ttf";
işin en güzel tarafı...
istediğimiz yazı tipini kullanmak..
ben şimdi ek olarak yazı tipi hizmeti veren bir sitede verecem size Yazı Tipi - Yazı Tipleri | www.yazitipi.com siz kendinizde sevdiğiniz bir yazı tipi varsa onu eklersniiz. ama bu yazı tipi işlem yapılan yani yukle.php nin altında olacak. c:/windows/fonts ta falan değil. ok?

--------------------------------------------------------

28. Satır : $yazi_boyutu = "15";
burada ise yazıının boyutunu ayarlıyoruz. 15 değilde 20 yapabilirz vs vs...

------------------------------------------------------------------

29. Satır : $yazi_dongusu = "0";
evet burada yazı dongusu demişim ama aklıma başka bişi gelmedi ne demektir yazı dongusu?
bu değeri 20 30 vs vs.. yaparsanız anlarsınız ben yinede anlatayım burada yazıyı sağdan yukarı doğru eğer.

------------------------------------------------------------

30. Satır : $kalitesi = "100";
evet burada istediğiniz kalitede kaydeder resmi ben 100 demişim zaten 100 maxsimumdur.
eğer 0 yaparsanız göreceksiniz ki resim çok bozulmuş. ama tabii ki boyut farkı var.

-------------------------------------------------------------------

31. Satır : $beyaz_renk = imagecolorallocate($resmimiz, 255,255,255);
burada ise yazının rengini seçtik ve renk olarak 255,255,255 değerlerini yazni beyazı atadık eger siyah olmasını isterseniz 0,0,0 yapın.

-------------------------------------------------------------------

32. Satır : imagettftext($resmimiz, $yazi_boyutu, $yazi_dongusu, $neresine_yazilsin_sol, $neresine_yazilsin_ust, $beyaz_renk, $yazi_tipi, $yazi);

Evet... burada bütün işlem burada yatıyor Nihayet emeklerimizin karşılığını bu imagettftext verecek
arkadaşları burayı anlatmasam? valla yoruldum bi sigara içeyim..
Zaten belli ne olduğu yukardaki değerleri anlatmışım zaten arguman arguman değişkenlerle iş yapıyor bu kısım. valla es geçtim

-----------------------------------------------------------------------

33. Ve Nihayet Son Satır :
imagejpeg($resmimiz,$kaydedilecek_yer,$kalitesi);
evet arkadaşlar burada ise resmin kalitesini belirledik ve yolumuza devam ettik.

-------------------------------------------------------------------------



NOT : Arkadaşlar bu uygulma için GD Kütüphanesinin aktif olması lazım.
Eğer ektif değilsede php.ini dosyanızda ;extension=php_gd2.dll
diye bi yer olacak oradan başındaki ";" işaretini kaldırın ve kaydedin.
bu kadar.

Herkese Kolay Gelsin.

Makale SAhibi : Semih Vural





Yorumlar
Henüz Kimse Yorum Yapmamış, ilk yorumu siz ekleyin!
Yorum Ekleme Aparatı
Yorum Eklemek için lütfen sol menuden giris yapınız..
Toplam 0 yorum listelendi.