PHP ile Resimlere Fligram Ekleme

Evet arkadaşlar PHP sadece bir kaç if else ve while gibi komutlardan oluşan cılız bir dil değildir. Yapabildikleri bundan çok daha fazladır aslında. Bu dersimizde size sınırlı bilgimle PHP ile resim işleme yöntemlerinden biri olan resimlere nasıl fligram eklenebileceğini göstermeye çalışacağım.

Bu işlemlere başlayabilmek için herşeyden önce sunucunuzda PHP’nin gd kütüphanesinin kurulu ve aktif olması gerekmektedir. Esasında bir çok host varsayılan olarak bu kütüphaneyi sunar. Sisteminizdeki kurulumun gd kütüphanesinin etkinliğini denetlemek için boş bir sayfaya phpinfo(); yazarak sayfayı kaydedin ve sonra tarayıcınızdan sayfayı çağırın. PHP’nin tüm bilgileri ekranda listelenecektir. Burada gd alanını bulun. Benim sistemimdeki görüntü şöyle

phpinfo

Eğer kendi özelliklerinizde gd yok ya da disable olarak görülüyorsa kütüphaneyi yükleyin ve/veya etkinleştirin.

Şimdi gelelim asıl dersimize önce resimlerimize bir bakalım. Şimdi aşağıda üzerine fligram ekleyeceğimiz resimi görüyoruz.

orjinal

Bu resime ekleyeceğimiz fligram da aşağıdaki olsun.

fligram

Şimdi de kodumuzu yazmaya başlayalım. İlk önce orjinal resmimizi ve üzerine eklenecek fligramı ve bunların konumlarını belirtiyoruz.

$fligram = imagecreatefrompng('images/fligram.png');
$resim = imagecreatefromjpeg('images/orjinal.jpg')

Ardından fligramın resim üzerinde duracağı konum için kenar boşluklarını ve konumlandırmak için yine fligramın genişlik ve yükseklik değerlerini alıyoruz.

$marge_right = 10;
$marge_bottom = 10;
$konum_x = imagesx($fligram);
$konum_y = imagesy($fligram);

Şimdi de aşağıdaki gibi fligramın resmin sağ alt köşesinde istediğimiz konumda olmasını sağlayalım.

imagecopy($resim, $fligram, imagesx($resim) - $konum_x - 10, imagesy($resim) - $konum_y - $marge_bottom, 0, 0, imagesx($fligram), imagesy($fligram));

Son olarak da çıktımızı oluşturuyoruz.

header('Content-type: image/png');
imagepng($resim);
imagedestroy($resim);

Bu kodların tamamını php imleri içine aldığımızda aşağıdaki gibi bir sonuç elde ediyoruz.

<?php
$fligram = imagecreatefrompng('images/fligram.png');
$resim = imagecreatefromjpeg('images/orjinal.jpg');

$marge_right = 10;
$marge_bottom = 10;
$konum_x = imagesx($fligram);
$konum_y = imagesy($fligram);

imagecopy($resim, $fligram, imagesx($resim) - $konum_x - 10, imagesy($resim) - $konum_y - $marge_bottom, 0, 0, imagesx($fligram), imagesy($fligram));

header('Content-type: image/png');
imagepng($resim);
imagedestroy($resim);
?>

Sonuçta aşağıdaki resmi elde etmiş olduk.

örnek

Görüldüğü gibi resimimize fligramımızı yerleştirdik. Burada dikkat edilmesi gereken bir nokta var. Kodun 12. satırında header('Content-type: image/png'); ifadesini görüyoruz. Eğer bir PHP kodunda header content kullanılıyorsa onun yukarısında ekrana hiç bir şey yazdırmamalısınız yoksa sayfanızda resim yerine saçma sapan yazılar görürsünüz. Burada ekrana birşey yazdırmamalısınız derken çıktı olarak demek istiyorum yoksa kod kısmında bir sıkıntı yok. Kısaca şöyle özetleyelim header content varsa onun yukarısında print ve echo olmamalı.

Peki bu durumda ne yapacağız. Çok basit zaten content ile çıktımızı png olarak ürettiğimiz için oluşturduğumuz yukardaki kodu ayrı bir sayfa olarak kaydedeceğiz. Mesela ben ornek.php olarak kaydettim. Daha sonra bu php sayfasını tıpkı bir resmi çağırıyormuşuz gibi çağırıyoruz. Yani <img src="ornek.php>yazacağız.

Daha iyi anlaşılması için isterseniz aşağıdaki koda bakalım

<style type="text/css">
<!--
body,td,th {
    color: #FFFFFF;
}
body {
    background-color: #006699;
}
-->
</style>
<p>Deneme sayfası</p>
<p>
  <img src="button.php?">

Bu çok basit sayfadan da görüldüğü gibi ornek.php sayfamızı tıpkı bir resim gibi çağırdık ve sonuç aşağıdaki gibi oldu

son

Bu şekillde gd kütüphanesi kullanarak resmimizin üzerine günün tarihini bile attırabiliriz yani fligram bir resim değil de belirlediğimiz bir yazı da olabilir. Hatta bir döngü ile böyle belli konumdaki dosyaları sıra ile bu işlemden geçirerek birden çok resim üzerinde işlem yapabiliriz. Tabi istersek fligramın konumunu da değiştirebiliriz ancak bunların hepsi birer ayrı bir yazı konusu onun için şimdilik burada noktalıyorum hepinize kolay gelsin.


8 Comments

  • Furkan

    14 Temmuz 2015

    Paylaşımınız için çok teşekkür ederim

  • HayalEt

    14 Temmuz 2015

    Yorumunuzdan dolayı ben teşekkür ederim umarım işinize yaramıştır.

  • hakan

    07 Ekim 2017

    post ile gönderdiğim resime fligram ekliyorum ama klasöre kaydedemiyorum, klasöre kaydedebilmem için ne yapmalıyım ? bu arada inanılmaz güzel bir paylaşım. sade ve basit bir anlatım için teşekkürler.

  • HayalEt

    09 Ekim 2017

    Öncelikle güzel yorumlarınız için teşekkür ederim.

    Bir dosyayı istenilen klasöre yüklemek apayrı bir komu. Eğer yanlış anlamadıysam aşağıdaki link size yardımcı olacaktır.
    http://php.net/manual/tr/features.file-upload.post-method.php

    Özellikle Örnek 2 – Dosya yüklemelerinin doğrulanması başlığı benim kullandığım yönteme benziyor.

  • hakan

    09 Ekim 2017

    cevabınız için teşekkür ederim harikasınız

  • HayalEt

    10 Ekim 2017

    Ben teşekkür ederim

  • fethi

    28 Kasım 2018

    Hocam logosuz resmi ve logo eklenmiş resmi veri tabanına nasıl kayıt ederim.

  • HayalEt

    28 Kasım 2018

    Merhaba, öncelikle yorumunuz için teşekkür ederim.

    Başlamadan önce şunu belirtmeliyim ki doğrusu bunu hiç denemedim

    Öncelikle resim dosyasını doğrudan veritabanına eklemek eğer gerekli değilse ya da sadece üyelerin görmesi gereken bir resim değilse veritabanının boyutunu hızla arttıracağı için uygun olmayabilir. Yine de yapmak isterseniz google da “How to insert image in mysql database” şeklinde arama yaparsanız pek çok örnek var. Kolayca bulabilirsiniz. Ben daha çok sunucuda bir klasöre yazıp veritabanında yazdığım klasörün yolunu tutuyorum. İhtiyaç olunca da veritabanından ilgili yolu okuyup dosyanın gözükmesini sağlıyorum.

    Logosuz resimin kaynağı zaten sizde olduğu için post metoduyla sayfaya gönderip bu sayede veritabanı ya da dizin nereye isterseniz yazabilirsiniz. Logolu resimi de yazdığım makaledeki gibi header ile başka sayfadan nasıl çağırıyorsam (imagepng($resim) değişkeni) o isimle okuyup almayı deneyebilirsiniz ancak bence en sağlıklısı daha sonlarda bahsettiğim gibi doğrudan kodu oluşturduğumuz sayfayı başka bir sayfadan çağırabilirsiniz. (img src=ornek.php ornek.php tırnak içinde olmalı) ancak veritabanına yazmak istiyorsanızeğer php dosyalarınız ve veritabanı aynı sunucuda değilse veritabanına yazmada problem yaşama ihtimaliniz de var

    Biraz karışık oldu galiba ancak yorumlarda yazarak ancak bu kadar anlatabiliyorum şimdilik.

Bir yanıt yazın