PHP thumnail boyutlandırma kodu
1
●1.672
- 28-02-2013, 11:01:43resize.php
<?php /** * Dosya = thumb.php * Yazan = Tuncay KINALI (****.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([MENTION=7435]image[/MENTION]gif($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([MENTION=7435]image[/MENTION]jpeg($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([MENTION=7435]image[/MENTION]png($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); } } } ?>kullanımı
resize.php?p=images/1.png&w=200&h=200
resize.php?p= resim yolu
&w= genişliği
&h= yüksekliği
şeklinde thumnail resimi oluşturup çağırabilirsiniz.