Php ile küçük resim thumbnail oluşturmak

Ana sayfa Forumlar PROGRAMLAMA PHP Php ile küçük resim thumbnail oluşturmak

1 yazı görüntüleniyor (toplam 1)
  • Yazar
    Yazılar
  • #12652
    Gö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);
    }
    }
    }
    ?>

1 yazı görüntüleniyor (toplam 1)
  • Bu konuyu yanıtlamak için giriş yapmış olmalısınız.
Bana Ders Anlat © 2008-2022