• 28-02-2013, 07:13:36
    #1
    hallettim
  • 28-02-2013, 11:01:43
    #2
    resize.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.