PHP Resim Boyutlandırma

Genellikle kullanıcıların resim yüklediği PHP sistemlerde kullanılan resim boyutlandırma işlemi için gerekli olan resim boyutu öğrenme, resim boyutlandırma fonksiyonları, resim boyutunu ayarlama, resim boyutu değiştirme ve resim boyutunu küçültme ile ilgili bilgiler yer almaktadır.

PHP resim işlemleri için GD eklentisinin aktif edilmesi gerekmektedir.

Resim boyutu öğrenme

PHP ile resim işlemlerinde resim boyutunu öğrenmek için getimagesize fonksiyonundan faydalanılır.

Fonksiyon parametre olarak aldığı resim dosyası ile ilgili çeşitli bilgileri dizi olarak verir.

<?php

echo "<pre>";
print_r(getimagesize('ben.jpg'));

?>

Resim boyutlandırma fonksiyonları

PHP ile resim boyutunu küçültme, resim boyutu değiştirme, resim boyutu ayarlama vb. işlemler için imagecopyresampled ve imagecopyresized fonksiyonu kullanılır.

imagecopyresized – İşlemi hızlı ve yumuşatmadan düşük kalitede yapar.

imagecopyresampled – İşlemi yavaş ve yumuşatarak yüksek kalitede yapar.

Resim boyutunu değiştirme

Aşağıdaki örnek belirlenen değerlere göre JPEG, JPG formatındaki resim boyutunu değiştirmektedir.

<?php

header('Content-type: image/jpg');

$dosya = 'resim.jpg';

list($genislik, $yukseklik) = getimagesize($dosya);

$yeni_genislik = 250;
$yeni_yukseklik = 250;

$mevcut_resim = imagecreatefromjpeg($dosya);
$yeni_resim = imagecreatetruecolor($yeni_genislik, $yeni_yukseklik);

imagecopyresampled($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);
//imagecopyresized($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);

imagejpeg($yeni_resim);
//imagejpeg($yeni_resim, 'yeni_resim.jpg', 100);  // oluşan resmi yeni_resim.jpg olarak %100 kalitede kaydet.

?>

Resim boyutunu ayarlama

Resim boyutlandırma sırasında yeni genişlik ve yüksekliğin doğru veya iyi verilmemesi resmin kaymasına, istenmeyen bir sonuç vermesine neden olabilir.

Bu durumda yeni resim boyutunun ayarlanması için bir oran belirlenmesi veya hesaplama yapılması faydalı olacaktır.

<?php

header('Content-type: image/jpg');

$dosya = 'ben.jpg';
$oran = 0.2;

list($genislik, $yukseklik) = getimagesize($dosya);

$yeni_genislik = $genislik * $oran;
$yeni_yukseklik = $yukseklik * $oran;

$mevcut_resim = imagecreatefromjpeg($dosya);
$yeni_resim = imagecreatetruecolor($yeni_genislik, $yeni_yukseklik);

imagecopyresampled($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);
//imagecopyresized($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);

imagejpeg($yeni_resim);
//imagejpeg($yeni_resim, 'yeni_resim.jpg', 100);  // oluşan resmi yeni_resim.jpg olarak %100 kalitede kaydet.

?>

Resim boyutunu küçültmek için 0 ila 1 arasında bir değer, resim boyutunu büyütme için 1’den büyük değer verilmesi yeterli olacaktır.

Resim genişliği ve yüksekliği 2500 olan bir resim 0.5 oranında küçültülünce yeni resim genişliği ve yüksekliği (2500 * 0,5 =) 1250 olur.

Aşağıdaki örnekte verilen genişlik veya yükseklik boyutuna göre resim boyutu ayarlanmaktadır.

<?php

header('Content-type: image/jpg');

$dosya = 'resim.jpg';
list($genislik, $yukseklik) = getimagesize($dosya);

$boyut = 250;

$oran = $genislik / $boyut;
//$oran = $yukseklik / $boyut;

$yeni_genislik = $genislik / $oran;
$yeni_yukseklik = $yukseklik / $oran;

$mevcut_resim = imagecreatefromjpeg($dosya);
$yeni_resim = imagecreatetruecolor($yeni_genislik, $yeni_yukseklik);

imagecopyresampled($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);
//imagecopyresized($yeni_resim, $mevcut_resim, 0, 0, 0, 0, $yeni_genislik, $yeni_yukseklik, $genislik, $yukseklik);

imagejpeg($yeni_resim);
//imagejpeg($yeni_resim, 'yeni_resim.jpg', 100);  // oluşan resmi yeni_resim.jpg olarak %100 kalitede kaydet.

?>

Resim boyutu hesaplanırken girilen boyut değeri genişliğe göre ($genislik) hesaplandığından, genişliği 250px, yüksekliği ise 250px oranına göre değer alacaktır.

Oran hesaplanırken genişlik yerine ($genislik), yükseklik ayarlandığında ($yukseklik), resmin genişliği verilen yükseklik boyutuna göre ayarlanacaktır.

PHP Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!