10 Mayıs 2008 Cumartesi

PHP ile Image GD

Merhaba Webkolog takipçileri! Web geliştirme projelerinde sıklıkla karşılaşılan görevlerden biri de görüntü dosyalarıyla çalışmaktır. Görüntüleri yeniden boyutlandırmak, üzerine yazı yazmak, filigran eklemek veya dinamik grafikler oluşturmak gibi işlemler için PHP'nin güçlü GD (Graphics and Drawing) kütüphanesini kullanabiliriz. Bugünkü makalemde, GD kütüphanesinin temel fonksiyonlarını ve PHP 5.2 ve önceki versiyonlarda nasıl kullanıldığını anlatacağım.

GD Kütüphanesi Nedir?

GD, programlama yoluyla görüntü dosyalarını oluşturmak ve değiştirmek için kullanılan bir açık kaynak kütüphanedir. PHP, bu kütüphane için yerleşik fonksiyonlar sunarak dinamik görüntü işlemleri yapmamıza olanak tanır. GD ile, yeni bir görüntü oluşturabilir, mevcut bir görüntüyü okuyabilir, piksel bazında değişiklikler yapabilir ve farklı formatlarda (JPEG, PNG, GIF) çıktı alabiliriz.

GD kütüphanesini kullanabilmek için, PHP'nin bu modülünün sunucunuzda etkin olması gerekir. phpinfo() fonksiyonu ile GD desteğinin olup olmadığını kontrol edebilirsiniz.

Temel GD Fonksiyonları ve Örnek Kullanımlar

GD ile bir görüntü oluşturma ve üzerinde işlem yapma süreci genellikle şu adımları içerir:

  1. Yeni bir görüntü kaynağı oluşturma veya mevcut bir görüntüyü yükleme.
  2. Görüntü için renkleri tanımlama.
  3. Görüntü üzerine şekiller, metinler veya başka görüntüler çizme.
  4. Görüntüyü bir dosyaya kaydetme veya doğrudan tarayıcıya çıktı olarak gönderme.
  5. Bellekteki görüntü kaynağını serbest bırakma.

1. Boş Bir Görüntü Oluşturma ve Çizim

Önce imageCreateTrueColor() fonksiyonu ile boş bir tuval oluşturabiliriz. Ardından, imageColorAllocate() ile renk tanımlayıp, imageLine() gibi fonksiyonlarla çizim yapabiliriz.

<?php
    // 400x300 boyutunda boş bir görüntü oluştur
    $tuval = imageCreateTrueColor(400, 300);

    // Kırmızı rengi tanımla
    $kirmizi = imageColorAllocate($tuval, 255, 0, 0);

    // Tuvalin sol üst köşesinden (0,0) başlayıp (100,100) noktasına kırmızı bir çizgi çiz
    imageLine($tuval, 0, 0, 100, 100, $kirmizi);

    // Tarayıcıya bir PNG görüntüsü gönderileceğini bildir
    header('Content-Type: image/png');

    // Görüntüyü PNG olarak çıktı ver
    imagePNG($tuval);

    // Belleği serbest bırak
    imageDestroy($tuval);
?>

Bu kodu çalıştırdığınızda, tarayıcınızda 400x300 piksel boyutunda, üzerinde kırmızı bir çizgi olan bir PNG görüntüsü göreceksiniz.

2. Görüntüleri Yeniden Boyutlandırma (Thumbnail Oluşturma)

Mevcut bir görüntüyü alıp daha küçük boyutlarda bir ön izleme (thumbnail) oluşturmak en yaygın GD işlemlerindendir. Bunu imageCopyResized() fonksiyonu ile yapabiliriz.

<?php
    // Kaynak görüntüyü yükle
    $kaynak = imageCreateFromJPEG('ornek.jpg');
    $kaynak_genislik = imagesx($kaynak);
    $kaynak_yukseklik = imagesy($kaynak);
    
    // Yeni boyutları belirle
    $hedef_genislik = 200;
    $hedef_yukseklik = 150;
    
    // Yeni bir boş tuval oluştur
    $hedef = imageCreateTrueColor($hedef_genislik, $hedef_yukseklik);
    
    // Kaynak görüntüyü yeni tuvale kopyala ve yeniden boyutlandır
    imageCopyResized($hedef, $kaynak, 0, 0, 0, 0, $hedef_genislik, $hedef_yukseklik, $kaynak_genislik, $kaynak_yukseklik);
    
    // Tarayıcıya çıktı ver
    header('Content-Type: image/jpeg');
    imageJPEG($hedef);
    
    // Belleği serbest bırak
    imageDestroy($kaynak);
    imageDestroy($hedef);
?>

3. Görüntüye Metin Yazma

Bir görüntünün üzerine metin eklemek için imageString() fonksiyonunu kullanabiliriz. Daha gelişmiş fontlar için ise imageTtfText() fonksiyonu tercih edilir.

<?php
    $tuval = imageCreateTrueColor(300, 100);
    $beyaz = imageColorAllocate($tuval, 255, 255, 255);
    $siyah = imageColorAllocate($tuval, 0, 0, 0);
    
    // Arkaplanı beyaza boya
    imageFill($tuval, 0, 0, $beyaz);
    
    // Görüntüye metin yaz
    imageString($tuval, 5, 50, 40, "Merhaba Webkolog!", $siyah);
    
    // Tarayıcıya çıktı ver
    header('Content-Type: image/jpeg');
    imageJPEG($tuval);
    
    imageDestroy($tuval);
?>

Gördüğünüz gibi, GD kütüphanesi ile görüntü manipülasyonu yapmak oldukça kolay ve esnektir. Bu temel fonksiyonlar, projelerinizde dinamik grafikler, CAPTCHA sistemleri veya otomatik thumbnail oluşturma gibi birçok farklı işlev için size bir başlangıç noktası sunar.

Webkolog'u takipte kalın!

Hepinize bol kodlu ve keyifli öğrenme süreçleri dilerim!

0 yorum:

Yorum Gönder