Php Resim Yükleme ve Yeniden Boyutlandırma

Php Yazılım

Php Resim Yükleme ve Yeniden Boyutlandırma

php resim yükleme ve yeniden boyutlandirma

Php resim yükleme üzerine internette kamyonla örnek dolaşmakta. Birçoğu çalışmıyor veya istediğimiz nitelikte değil. Benim işime yarayan ve sizinde ihtiyacınız olduğunda hayat kurtaran bu kodu paylaşmak istedim. Resmi yükler,yeniden boyutlandırır  ,dilerseniz orjinal dosyayı dilerseniz yeni biçimlendirilmiş dosyayı kullanabilirsiniz.

Örnek üzerinden tek sayfada bir form üzerinden nasıl resim yüklenir ve bu resimler nasıl yeniden boyutlandırılır inceleyeceğiz. Aşağıdaki örneği klasörleride tanımladıktan sonra servera gönderip denemeniz yeterlidir. Piyasadaki kırık kodlar gibi aksaklık vermeyecektir. Kod içindeki açıklamaları okumanız kafi gelecektir.

Ön Hazırlık

Ftp ye giriş yapın ve index.php diye bir dosya oluşturup aşağıdaki kodu direkt yapuştırıp gönderin. orjinal ve yeni resim adı altında iki klasör oluşturun ve dosya yetkilerini 755 yapın. Açıklamalara göz atabilirsiniz.

 

KOD

<html>
<head>
</head>
<body>
<h2>Resim Yükle ve Boyutlandır</h2>

<form enctype="multipart/form-data" action="index.php" method="post" >

    <label for="resim">Resim Seç</label>
    <input type="file" name="resim" id="resim" required />


    <br><br>
    <input type="submit" value="Yükle" />

</form>

</body>
</html>
<?php

function resizeImage($CurWidth,$CurHeight,$MaxSize,$DestFolder,$SrcImage,$Quality,$ImageType)
{
    //Dosya boyutu 0 kb kontrolü yapıyoruz. Eger 0 sa işlem yapmayacak
    if($CurWidth <= 0 || $CurHeight <= 0)
        {   
        return false;
        }

    //Yeni oluşacak resmin boyutlarını hesap ediyoruz
    $ImageScale         = min($MaxSize/$CurWidth, $MaxSize/$CurHeight);
    $NewWidth       = ceil($ImageScale*$CurWidth);
    $NewHeight      = ceil($ImageScale*$CurHeight);

    if($CurWidth < $NewWidth || $CurHeight < $NewHeight)
        {   $NewWidth = $CurWidth;
            $NewHeight = $CurHeight;
        }
    $NewCanves  = imagecreatetruecolor($NewWidth, $NewHeight);
    // Boyutlandırma işlemi başlıyor
    if(imagecopyresampled($NewCanves, $SrcImage,0, 0, 0, 0, $NewWidth, $NewHeight, $CurWidth, $CurHeight))
        {   switch(strtolower($ImageType))
                {   case 'image/png':
                        imagepng($NewCanves,$DestFolder);
                        break;
                    case 'image/gif':
                        imagegif($NewCanves,$DestFolder);
                        break;          
                    case 'image/jpeg': // * Bu satıra ve alttaki satıra dikkat. Php varsayılan olarak jpeg gösterir ama işlemez. Muhtemelen jpeg türü dosyalarınızı biçimlendiremeyeksiniz. Php yi yeniden derlerken kodun sonundaki gibi php derlemenizi yaptıktan sonra bu kısım da çalışır hale gelecektir. Eğer webserver ınız jpeg işlemeyi desteklemiyorsa sayfa gidip gelir ,uyarı dahi vermez ,başa döner
                    case 'image/pjpeg':
                        imagejpeg($NewCanves,$DestFolder,$Quality);
                        break;
                    default:
                        return false;
                }
            if(is_resource($NewCanves))
                { imagedestroy($NewCanves);
                }
            return true;
        }

}


if(isset($_FILES['file']['name'])){

    if( $_FILES['file']['size']<4096 ){ //dosya boyutu maksimum 4 mb olacak. Bu değeri dilediğiniz gibi değiştirin. Değer mb cinsindendir.


            //Bazı ayarlar yapılıyor
            $BigImageMaxSize                = 300; //Çıkan yeni resmin boyutu boyuna veya enine en fazla 300px olabilir demek. Değeri istediğiniz ebata getirebilirsiniz.
            $ResizePrefix                   = "yeni_"; //Yeniden boyutlandırdığınız dosyanın başına ne yazmasını istersiniz. Bu sayede daha kolay bulunabilir.
            $OriginalDestinationDirectory   = 'orjinali/'; //Yüklenen orjinal dosyayı hangi klasörde tutsun. Klasörü oluşturmanız gerekir.
            $ResizedDestinationDirectory    = 'yeniresim/'; //Biçimlendirilmiş resimleri nerede tutsun. Klasör oluşturulmuş olmalı
            $Quality                        = 100; //sıkıştırma kalitesi ne olsun. Değer düşerse pixellenme olabilir. Kalite düşer
            $ResizedImageLocation[]         = "";
            $OriginalImageLocation[]        = "";

            // Yüklediğiniz dosyanın özlük bilgileri dökülüyor. Bu bilgiler lazım oldukça kullanılacak
            $ImageName=$_FILES['file']["name"];
            $ImageSize=$_FILES['file']['size'];
            $TempSrc=$_FILES['file']['tmp_name'];
            $ImageType=$_FILES['file']['type'];

            $processImage = true;


            //Dosyayı oluşturmak için ilk adımları atıyoruz. Uzantısına göre php de farklı fonksiyonlar kullanılacak.
                    switch(strtolower($ImageType))
                        {       case 'image/png':
                                    $CreatedImage = imagecreatefrompng($TempSrc);
                                    break;
                                case 'image/gif':
                                    $CreatedImage = imagecreatefromgif($TempSrc);
                                    break;
                                case 'image/jpeg':
                                case 'image/pjpeg':
                                    $CreatedImage = imagecreatefromjpeg($TempSrc);
                                    break;
                                default: //eğer bu dosya tiplerinden farklı bir dosya gelirse mesela avi film dosyası veya pdf dökümanı gibi program uyarı verecek.
                                    $processImage = false; //Format desteklenmiyor!
                        }

                    //Resim boyutu alınıyor
                    list($CurWidth,$CurHeight) = getimagesize($TempSrc);

                    //Hedef klasörler belirleniyor
                    //Ham resim orjinal klasörüne gidecek ,işlenmiş resim yeniresim klasörüne gidecek
                    $DestRandImageName          = $ResizedDestinationDirectory.$ResizePrefix.$ImageName; //İşlenmiş
                    $OriginalImageName          = $OriginalDestinationDirectory.$ImageName; //Orjinal

                    $moveImage = move_uploaded_file($TempSrc, $OriginalImageName); //Taşıma işlemi yapılsın

                    //resizeImage fonksiyonu ile belirlediğimiz ebatta resim işleniyor.
                    if($processImage && resizeImage($CurWidth,$CurHeight,$BigImageMaxSize,$DestRandImageName,$CreatedImage,$Quality,$ImageType))
                        {   

                            //Yeni boyutları belirliyoruz ve sonuç sayfasında bilgilendiriyoruz
                            list($ResizedWidth,$ResizedHeight)=getimagesize($DestRandImageName);
                            $ResizedImageLocation   = $DestRandImageName;
                            $OriginalImageLocation  = $OriginalImageName;

                            echo 'Resim Hakkındaki İşlem Detayı<br>

                            <p><a href="'.$OriginalImageLocation.'" target="_blank"><img src="'.$OriginalImageLocation.'"><br>Orjinal (Ham) Resim</a></p>
                            <p><a href="'.$ResizedImageLocation.'" target="_blank"><img src="'.$ResizedImageLocation.'"><br>İşlenmiş resim </a> <br> Yüksekliği veya genişliği 300px den az olan resimler işlenmeyecektir.</p>

                            ';


                        }
                    else
                        {   echo '<p style="color:red;">İşlem sırasında bir hata oluştu . Resim dosyası : <strong>'.$ImageName.'</strong>! Dosya türünün desteklenir olduğunu kontrol edin.</div>'; //Eğer çıktıda hata alırsanız bu cümleyle pekiştirilecek
                        }

    }

    else{
        echo '<p style="color:red;">Lütfen 4mb dan büyük dosya yüklemeyin.</p>';
    }

}

?>

 

2 thoughts on “Php Resim Yükleme ve Yeniden Boyutlandırma

  1. <\a href="'.$OriginalImageLocation.'" target="_blank" rel="nofollow"><\img src="'.$OriginalImageLocation.'">
    Orjinal (Ham) Resim

    <\a href="'.$ResizedImageLocation.'" target="_blank" rel="nofollow"><\img src="'.$ResizedImageLocation.'">
    İşlenmiş resim .

    125 ve 126. satırlarda yükleme bittiği anda nasıl gösterileceği örnekle not edilmiştir. Eğer niyetiniz yükleme sayfası değil de herhangi bir sayfada nasıl gösteririm ise 112. satırda
    $moveImage = move_uploaded_file($TempSrc, $OriginalImageName); //Taşıma işlemi yapılsın

    kod parçacığından hemen sonra bir insert sql işlemi gerçekleştirmeniz yerinde olacaktır. Bu insert parametrelerine ilerde çağırıp işlemek için dilediğiniz verileri not ettirebilirsiniz. Verdiğim örneğe göre bir insert işlemi (PDO örnektir) ;

    $sql = "INSERT INTO tablo_adi (orj_resim,
    yeni_resim) VALUES (
    :orj,
    :yres)";
    $stmt = $pdo->prepare($sql);
    $stmt->bindParam(':orj', $OriginalImageName, PDO::PARAM_STR);
    $stmt->bindParam(':yres', $DestRandImageName, PDO::PARAM_STR);
    $stmt->execute();

    Dosya yükleme örneğinde yol adlarını tanımlamak için kullandığımız $DestRandImageName, $DestRandImageName değişkenleri dilediğimiz tabloya kaydetmiş oluyoruz. Lazım olduğu yerlerde id si ile çağırıp kullanılabilir. Veya insert eylemine daha farklı bilgiler yüklenerek birlikte kullanılabilir. Hali hazırda varolan verilere ek yapılmak isteniyorsa update eylemi içerisin de kullanılabilir.

    $DestRandImageName ve $DestRandImageName resmin uzantısı dahil tam yolunun adreslendiği değişkenlerdir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir