Merhaba Webkolog takipçileri!
Web siteleri denilince akla ilk gelenlerden biri de görsellerdir, değil mi? Resimler, bir sitenin çekiciliğini artırır, bilgiyi daha anlaşılır kılar ve kullanıcı deneyimini zenginleştirir. Peki ya bu resimleri PHP kodlarımızla dinamik olarak oluşturabilir, düzenleyebilir veya üzerlerine yazı yazabilirsek? İşte tam da bu noktada PHP'nin **GD kütüphanesi** ve onunla gelen resim (image) fonksiyonları devreye giriyor! Bu makalede, PHP 5.2 ve önceki versiyonlarında yaygın olarak kullanılan temel resim işleme fonksiyonlarını ele alacağız. Gelin, kodlarımızla görsellere hayat vermeye başlayalım!
1. Yeni Resim Oluşturma ve Dosyadan Yükleme
PHP ile bir resim üzerinde işlem yapabilmek için öncelikle onu hafızada bir resim kaynağı olarak oluşturmamız veya mevcut bir resim dosyasını yüklememiz gerekir.
<?php
// GD kütüphanesinin yüklü olup olmadığını kontrol edelim
if (!extension_loaded('gd') && !extension_loaded('gd2')) {
die("GD kütüphanesi yüklü değil. Resim fonksiyonları kullanılamaz.");
}
// Boş bir resim oluşturma (genellikle bu fonksiyon PHP 5.2'de imagecreatetruecolor olarak geçse de,
// imagecreate hala kullanılabilir ve eski versiyonlarda 256 renk paletiyle çalışır.
// imagecreatetruecolor() PHP 4.0.6'dan itibaren mevcuttur ve daha gelişmiş renk desteği sunar.)
// Basit bir örnek için imagecreate() kullanalım.
$genislik = 200;
$yukseklik = 100;
$yeni_resim = imagecreate($genislik, $yukseklik);
if (!$yeni_resim) {
die("Boş resim oluşturulamadı.");
}
echo "Boş bir " . $genislik . "x" . $yukseklik . " boyutunda resim kaynağı oluşturuldu.<br>";
// Varolan JPEG resmini yükleme: imagecreatefromjpeg()
// Varolan bir "ornek.jpg" dosyasının olduğunu varsayalım.
// Test için boş bir ornek.jpg dosyası oluşturabilirsiniz veya küçük bir jpg resmi kullanın.
// file_put_contents('ornek.jpg', ''); // Boş bir jpg dosyası oluşturmak için
$jpeg_resim = @imagecreatefromjpeg('ornek.jpg'); // Hata vermemesi için @ kullanıldı
if ($jpeg_resim) {
echo "ornek.jpg başarıyla yüklendi.<br>";
// İşlem bittikten sonra hafızadan silmeyi unutmayın
imagedestroy($jpeg_resim);
} else {
echo "ornek.jpg yüklenemedi. Dosya mevcut olmayabilir veya geçersiz olabilir.<br>";
}
// Varolan GIF resmini yükleme: imagecreatefromgif()
// Varolan bir "ornek.gif" dosyasının olduğunu varsayalım.
// $gif_resim = @imagecreatefromgif('ornek.gif');
// if ($gif_resim) {
// echo "ornek.gif başarıyla yüklendi.<br>";
// imagedestroy($gif_resim);
// } else {
// echo "ornek.gif yüklenemedi.<br>";
// }
// Varolan PNG resmini yükleme: imagecreatefrompng()
// Varolan bir "ornek.png" dosyasının olduğunu varsayalım.
// $png_resim = @imagecreatefrompng('ornek.png');
// if ($png_resim) {
// echo "ornek.png başarıyla yüklendi.<br>";
// imagedestroy($png_resim);
// } else {
// echo "ornek.png yüklenemedi.<br>";
// }
// Oluşturulan boş resmi hafızadan silme
imagedestroy($yeni_resim);
?>
2. Renk Tanımlama ve Resim Doldurma
Resimlere pikseller çizmeden veya metin eklemeden önce, kullanacağımız renkleri tanımlamamız gerekir. Ardından, bir alanı belirli bir renkle doldurabiliriz.
<?php
$genislik = 300;
$yukseklik = 200;
$resim = imagecreate($genislik, $yukseklik); // 256 renk paletli resim
// Resim oluştururken kullanılacak renkleri tanımlamak: imagecolorallocate()
// İlk renk genellikle arka plan rengi olur.
$arka_plan_rengi = imagecolorallocate($resim, 255, 255, 255); // Beyaz (RGB)
$yazi_rengi = imagecolorallocate($resim, 0, 0, 255); // Mavi
$doldurma_rengi = imagecolorallocate($resim, 255, 0, 0); // Kırmızı
echo "Renkler tanımlandı.<br>";
// Belirtilen koordinatlara göre bir alanı doldurur: imagefill()
// imagefill(resim_kaynağı, x_koordinatı, y_koordinatı, renk)
// Genellikle resmin tamamını arka plan rengiyle doldurmak için kullanılır.
imagefill($resim, 0, 0, $arka_plan_rengi); // Resmin tamamını beyazla doldur
// Bir dikdörtgen çizip içini kırmızıyla dolduralım
// imagefilledrectangle() fonksiyonu PHP 5.0.0'dan itibaren mevcuttur.
// Eski versiyonlarda, imagefill() ve imagecolorallocate() kullanılarak alanlar doldurulabilirdi.
// Basit bir test için:
imagefilledrectangle($resim, 50, 50, 150, 150, $doldurma_rengi); // Kırmızı kare çiz
// Resmi çıktı olarak verelim (örn: PNG olarak)
header('Content-Type: image/png');
imagepng($resim);
// Kaynakları serbest bırakma
imagedestroy($resim);
exit(); // Çıktı gönderildikten sonra betiği durdur
?>
3. Resmin Üzerine Yazı Yazdırma (TrueType Yazı Tipi ile)
Dinamik olarak resim üzerine metin eklemek, filigran, başlık veya veri görseleştirmeleri için oldukça kullanışlıdır. Burada TrueType fontları (TTF) kullanacağız.
<?php
$genislik = 400;
$yukseklik = 200;
$resim = imagecreate($genislik, $yukheklik);
// Renkleri tanımlayalım
$arka_plan_rengi = imagecolorallocate($resim, 200, 200, 200); // Gri
$yazi_rengi = imagecolorallocate($resim, 0, 0, 128); // Koyu Mavi
$golge_rengi = imagecolorallocate($resim, 255, 255, 255); // Beyaz (gölge için)
// Arka planı dolduralım
imagefill($resim, 0, 0, $arka_plan_rengi);
// Resmin üzerine yazı yazdırmayı sağlar (TrueType Yazı Tipi): imagettftext()
// imagettftext(resim_kaynağı, font_boyutu, açı, x_koordinatı, y_koordinatı, renk, font_dosyası, metin)
// Bir TTF font dosyasına ihtiyacınız var. Örnek olarak 'arial.ttf' olduğunu varsayalım.
// Sisteminizde veya projenizin kök dizininde bir font dosyası (örn: Arial.ttf) olmalı.
$font_dosyasi = 'arial.ttf'; // Kendi font dosyanızın yolu
$metin = "Webkolog Resim Örneği!";
$metin2 = "PHP GD Fonksiyonları";
// Yazıya gölge verelim
imagettftext($resim, 22, 0, 51, 101, $golge_rengi, $font_dosyasi, $metin);
// Ana yazıyı yazalım
imagettftext($resim, 22, 0, 50, 100, $yazi_rengi, $font_dosyasi, $metin);
imagettftext($resim, 16, 0, 51, 151, $golge_rengi, $font_dosyasi, $metin2);
imagettftext($resim, 16, 0, 50, 150, $yazi_rengi, $font_dosyasi, $metin2);
// Resmin çıktısını verelim
header('Content-Type: image/png');
imagepng($resim);
// Kaynakları serbest bırakma
imagedestroy($resim);
exit();
?>
4. Resim Kaydetme ve Yok Etme
Üzerinde çalıştığımız resmi tarayıcıya gönderebildiğimiz gibi, sunucuya bir dosya olarak da kaydedebiliriz. İşimiz bittiğinde, hafıza kullanımını optimize etmek için resim kaynağını yok etmeliyiz.
<?php
$genislik = 150;
$yukseklik = 80;
$resim = imagecreate($genislik, $yukseklik);
$arka_plan = imagecolorallocate($resim, 200, 200, 255); // Açık Mavi
$yazi_renk = imagecolorallocate($resim, 0, 0, 0); // Siyah
imagefill($resim, 0, 0, $arka_plan);
$metin = "Kaydedilen Resim";
// TTF font dosyası örneği
$font_dosyasi = 'arial.ttf';
if (file_exists($font_dosyasi)) {
imagettftext($resim, 14, 0, 10, 45, $yazi_renk, $font_dosyasi, $metin);
} else {
// Eğer font dosyası yoksa, daha basit bir metin fonksiyonu kullanabiliriz.
// image_string_old() veya imagechar() gibi fonksiyonlar daha eski ve daha temeldir.
// Burada basit bir placeholder bırakalım.
imagestring($resim, 5, 10, 30, $metin, $yazi_renk); // imagestring() PHP 4.0.0'dan itibaren var.
}
// Resim oluşturur ve bir dosyaya kaydeder (JPEG): imagejpeg()
// imagejpeg(resim_kaynağı, dosya_yolu, kalite)
// kalite 0 (en kötü) ile 100 (en iyi) arasıdır.
$kayit_yolu_jpeg = 'olusturulan_resim.jpg';
if (imagejpeg($resim, $kayit_yolu_jpeg, 80)) {
echo $kayit_yolu_jpeg . " başarıyla kaydedildi.<br>";
} else {
echo $kayit_yolu_jpeg . " kaydedilemedi.<br>";
}
// Resim oluşturur ve bir dosyaya kaydeder (PNG): imagepng()
// imagepng(resim_kaynağı, dosya_yolu, sıkıştırma_seviyesi)
// sıkıştırma_seviyesi 0 (sıkıştırma yok) ile 9 (maksimum sıkıştırma) arasıdır.
$kayit_yolu_png = 'olusturulan_resim.png';
if (imagepng($resim, $kayit_yolu_png, 5)) {
echo $kayit_yolu_png . " başarıyla kaydedildi.<br>";
} else {
echo $kayit_yolu_png . " kaydedilemedi.<br>";
}
// Resim oluşturur ve bir dosyaya kaydeder (GIF): imagegif()
// imagegif(resim_kaynağı, dosya_yolu)
$kayit_yolu_gif = 'olusturulan_resim.gif';
if (imagegif($resim, $kayit_yolu_gif)) {
echo $kayit_yolu_gif . " başarıyla kaydedildi.<br>";
} else {
echo $kayit_yolu_gif . " kaydedilemedi.<br>";
}
// Resmi yok eder ve hafızayı serbest bırakır: imagedestroy()
imagedestroy($resim);
echo "Resim kaynağı hafızadan serbest bırakıldı.<br>";
?>
PHP'nin GD kütüphanesi ve onunla gelen resim fonksiyonları, web uygulamalarınızda görsellerle dinamik olarak etkileşim kurmanız için harika bir temel sunar. İster basit bir filigran eklemek, ister kullanıcı tarafından yüklenen resimleri yeniden boyutlandırmak veya dinamik grafikler oluşturmak isteyin, bu fonksiyonlar size güçlü araçlar sağlar. Güvenlik ve performans için büyük resimleri işlerken dikkatli olmayı unutmayın ve her zaman GD kütüphanesinin sunucunuzda kurulu olduğundan emin olun!
Webkolog'u takipte kalın!
Hepinize bol kodlu ve başarılı projeler dilerim!
0 yorum:
Yorum Gönder