Ana sayfa › Forumlar › PROGRAMLAMA › PHP › Php ile küçük resim thumbnail oluşturmak
- Bu konu 0 yanıt içerir, 1 izleyen vardır ve en son 12 yıl 6 ay önce Gökhan tarafından güncellenmiştir.
-
YazarYazılar
-
22 Nisan 2012: 18:01 #12652Gökhanİzleyici
Aşağıdaki kodları kullanarak resimleri php sayesinde küçültebilirsiniz
< ?php /** * Dosya = thumb.php * Yazan = Tuncay KINALI (a.k.a. Sniper) * Görevi = Parametre olarak verilen resmi istenilen boyutlarda küçültme, büyütme ve * orantılı olarak resmin içinden bir bölümü gösterme. Oluşturulan son resim * dosyasını yeniden isimlendirerek kaydetme. Sonraki çağırılışında bu isimde * dosya bulunduğu takdirde direkt olarak o dosyayı gösterme. * Parametreler = "p": Üzerinde oynanacak resmin yolu * "w": Resmin maximum genişliği (opsiyonel) * "h": Resmin maximum yüksekliği (opsiyonel) * "g": Bu değer 1 olarak tanımlandığı durumda, istenilen resim siyah-beyaz formatta gösterilir (opsiyonel) * Tarih = 11.08.2007 * Son Güncelleme = 15.10.2010 - 10:43 */ error_reporting(2); // Gösterilecek resmin yolu. $p = $_GET['p']; // Resmin istenilen genişliği. // Olası kötü amaçlı kullanımlara karşı maximum genişliği 1024px olarak ayarlıyoruz. $w = intval($_GET['w']) > 1024 ? 1024 : intval($_GET[‘w’]);
// Resmin istenilen yüksekliği
// Olası kötü amaçlı kullanımlara karşı maximum yüksekliği 768px olarak ayarlıyoruz
$h = intval($_GET[‘h’]) > 768 ? 768 : intval($_GET[‘h’]);// Resmi siyah/beyaz göstermek için bu parametrenin değeri 1 olmalı
$g = intval($_GET[‘g’]);// Belirtilen resim dosya sisteminde varsa…
if(file_exists($p)) {
// Dosya adını ve uzantısını ayrı ayrı al.
$dosyaAdi = substr($p, 0, strrpos($p, ‘.’));
$uzanti = substr($p, strrpos($p, ‘.’));
// Thumbnail dosya adını öğren
/**
* Thumbnail dosya adı, scriptin sonraki çalışmasında kontrol edeceği
* içinde istenilen genişliğin ve yüksekliğin belirtildiği isimdir.
* Örneğin thumb.php?p=resim.jpg&w=100&h=75 şeklinde çalıştırılan script
* için thumbnail dosya adı “resim_100_75.jpg” olarak belirlenecektir.
*/
$thumbFileName = $dosyaAdi;
$thumbFileName .= $w>0 ? ‘_w’.$w : ”;
$thumbFileName .= $h>0 ? ‘_h’.$h : ”;
$thumbFileName .= $uzanti;
// İstenilen ölçülerde thumbnail daha önce talep edilmiş ve dosya sistemine kaydedilmişse…
if(file_exists($thumbFileName) && $g===0) { // … thumbnail dosyasına yönlen ve çalışmayı durdur.
header(“Location: {$thumbFileName}”);
exit;
} else { // … ilk defa talep edilen thumbnail dosyası için çalışmaya başla
// Resmin bilgilerini al
$resim = getimagesize($p);
if($w && !$h) { // Max. Genişlik manuel olarak belirtilmiş ve yükseklik belirtilmemişse…
// … genişliği istenilen ölçüye getir …
$genislik = $w;
// … yüksekliği genişliğe orantılı bir şekilde hesapla.
$yukseklik = round(($genislik*$resim[1])/$resim[0]);
} elseif(!$w && $h) { // Max. Yükseklik manuel olarak belirtilmişse ve genişlik belirtilmemişse
// … yüksekliği istenilen ölçüye getir …
$yukseklik = $h;
// … genişliği yüksekliğe orantılı bir şekilde hesapla.
$genislik = round(($yukseklik*$resim[0])/$resim[1]);
} elseif($w && $h) { // Her iki özellikte manuel olarak belirtilmişse …
// … özellikleri istenilen ölçüye getir.
$yukseklik = $h;
$genislik = $w;
} else { // Her iki ölçü de girilmemişse ana resme git ve çalışmayı durdur.
header(‘Location: ‘. $p);
exit;
}
// Resmin türüne göre ana resmi belleğe kopyala
switch($resim[2]) {
case 1: // GIF
$kopya_resim = imagecreatefromgif($p);
$resim_mime_type = ‘image/gif’;
break;
case 2: // JPG
$kopya_resim = imagecreatefromjpeg($p);
$resim_mime_type = ‘image/jpeg’;
break;
case 3: // PNG
$kopya_resim = imagecreatefrompng($p);
$resim_mime_type = ‘image/png’;
break;
}// Belirlenen ölçülerde boş bir resim oluştur
$thumb = imagecreatetruecolor($genislik, $yukseklik);
imagealphablending($thumb, false);
imagesavealpha( $thumb, true );// Belleğe kopyalanan ana resmi istenilen ölçülere göre küçülterek oluşturulan resmi
// az önce oluşturduğumuz boş resmin içine yazdır.
imagecopyresampled($thumb, $kopya_resim, 0, 0, 0, 0, $genislik, $yukseklik, $resim[0], $resim[1]);if($h) {
/**
* Eğer maximum yükseklik değeri manuel olarak girilmişse ve bu değer
* scriptin oluşturduğu değerden farklıysa scriptin otomatik değeri yoksayılıp
* elle girilen değer dikkate alınarak thumbnail yeniden boyutlandırılır
*/
if($yukseklik>$h) $yukseklik = $h;
$thumb2 = imagecreatetruecolor($genislik, $yukseklik);
imagecopy($thumb2, $thumb, 0, 0, 0, (($h-$yukseklik)/2), $genislik, $yukseklik);
$sonuc = $thumb2;
} else {
$sonuc = $thumb;
}/** İstenilen boyuttaki thumbnail artık hazır
* Resmin türüne göre oluşturulan thumbnaili dosya sistemine yazdırmayı deneyeceğiz.
* Resmin bulunduğu klasörün yazma izinleri verilmişse thumbnail dosyası yukarıda
* ayarlanan isimle klasöre kaydedilir ve script kaydedilen bu dosyaya yönlendikten sonra
* çalışmayı durdurur. Yazma izinlerinde sorun varsa -ki bu scriptin esprisini yok eder-
* oluşturulan thumbnail’i direkt olarak browser’a yollar ve her seferinde yukarıdaki işlemleri yapar
*/
switch($resim[2]) {
case 1: // GIF
if($g===1) { // Resim siyah beyaz istenmişse çevirip gönder
function_exists(‘imagefilter’) ? imagefilter($sonuc, IMG_FILTER_GRAYSCALE) : grayScale($sonuc);
header(“Content-Type: {$resim_mime_type}”);
imagegif($sonuc);
} else {
if(@imagegif($sonuc,$thumbFileName)) {
header(‘Location: ‘.$thumbFileName);
exit;
} else {
header(“Content-Type: {$resim_mime_type}”);
imagegif($sonuc);
}
}
break;
case 2: // JPG
if($g===1) { // Resim siyah beyaz istenmişse çevirip gönder
function_exists(‘imagefilter’) ? imagefilter($sonuc, IMG_FILTER_GRAYSCALE) : grayScale($sonuc);
header(“Content-Type: {$resim_mime_type}”);
imagejpeg($sonuc,NULL,80);
} else {
if(@imagejpeg($sonuc,$thumbFileName,80)) {
header(‘Location: ‘.$thumbFileName);
exit;
} else {
header(“Content-Type: {$resim_mime_type}”);
imagejpeg($sonuc,NULL,80);
}
}
break;
case 3: // PNG
if($g===1) { // Resim siyah beyaz istenmişse çevirip gönder
function_exists(‘imagefilter’) ? imagefilter($sonuc, IMG_FILTER_GRAYSCALE) : grayScale($sonuc);
header(“Content-Type: {$resim_mime_type}”);
imagepng($sonuc);
} else {
if(@imagepng($sonuc,$thumbFileName)) {
header(‘Location: ‘.$thumbFileName);
exit;
} else {
header(“Content-Type: {$resim_mime_type}”);
imagepng($sonuc);
}
}
break;
}
// Tüm işlemler bittikten sonra bellek boşaltılıp bir nebze olsun sunucu rahatlatılır
imagedestroy($sonuc);
}
}function grayScale(&$im) {
$imgw = imagesx($im);
$imgh = imagesy($im);for ($i=0; $i< $imgw; $i++) { for ($j=0; $j<$imgh; $j++) { // get the rgb value for current pixel $rgb = ImageColorAt($im, $i, $j); // extract each value for r, g, b $rr = ($rgb >> 16) & 0xFF;
$gg = ($rgb >> 8) & 0xFF;
$bb = $rgb & 0xFF;// get the Value from the RGB value
$g = round(($rr + $gg + $bb) / 3);// grayscale values have r=g=b=g
$val = imagecolorallocate($im, $g, $g, $g);// set the gray value
imagesetpixel ($im, $i, $j, $val);
}
}
}
?> -
YazarYazılar
- Bu konuyu yanıtlamak için giriş yapmış olmalısınız.