PHP İle Resim Üzerine Yazı Ekleme ve Kaydetme

Merhaba arkadaşlar, bu yazımızda resim üzereine yazı ekleme ve kaydetme işlemlerini inceleyeceğiz. Dersimzi başlıyor…
Şimdi öncelik olarak verilerimizi gondereceimiz bir form’a ve form öğelerine ihtiyacımız var.
form.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.

[ad#orta]

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

yukle.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.
————————————————————————-
Evet arkadaşlar işte bu kadar hepsi.
umarım kişi yada kişilere yardmımım dokunmuştur.
Semih VURAL
WEBAS İnternet ve Programlama Hizmetleri
Kolay Gelsin.
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.
Kaynak : DoguBey (Alıntı Sebebi : Çok güzel bir anlatım ve uygulama olduğu için arşivimde bulunmasını ve sizlerinde faydalanmasını istedim. Bu yüzden aynen siteme ekledim. Affola..)

Herkese Başarılar…

KategorilerPhp

“PHP İle Resim Üzerine Yazı Ekleme ve Kaydetme” için 2 cevap

  1. harika olmuş yazanında buraya ekleyeninde ellerine yüreklerine sağlık cok işime yaradı birde bunu ekleme silme şeklinde olsaydı mükemmel olcaktı yinede allah razı olsun

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir