Resim Yükleme ve Boyutlandırma

 bcakir
 29 Ekim 2011
 Php

Merhaba arkadaşlar yeni bir yazıyla karşınızdayım. Bu yazımda bir resmi istenilen boyutta orantılı olarak küçülterek servera yükleme işlemini anlatacağım. Bu uygulamayla hem resimlerinizi boyutlandırabilecek hem de serverınıza sadece yeni resmi upload ederek alan tasarrufu sağlayacaksınız. Bunun yanında, sitenizin resimleri hızlı göstermesini ve az kota (bandwith) kullanmasını da sağlamış olacaksınız. Bu uygulamayı daha önce anlattığım orantılı resim boyutlandırma yazısını biraz daha geliştirerek yapacağım bundan dolayı bu yazıyı incelemenizde fayda olabilir. Uygulamamızı kısaca özetlersek; form elemanından seçilen jpg, gif ve png uzantılı resmi serverımıza küçülterek yükleyeceğiz. Bu uygulama özellikle kullanıcıların resimlerini avatara dönüştürmek için birebirdir. Uygulamamızın içeriğinden bahsettik, şimdi uygulamamızın Html kısmını yapmaya başlayalım.

<!DOCTYPE html>
<html>
<head>
<title>Resmi Boyutlandırarak Yükleme</title>
</head>
<body>

<form action="index.php" enctype="multipart/form-data" method="post">
<input type="file" name="datafile" size="40" />
<input type="submit" name="submit" value="Gönder" />
</form>

</body>
</html>

Yukarıda resim seçme işlemini form elemanları yardımıyla oluşturduk. Aşağıda yer alacak olan Php kodlarıyla birlikte bütün betiği index.php olarak kaydedin. Şimdi de resmi boyutlandırarak oluşturma işlemini geliştirmeye başlayalım.

<?php
if(isset($_FILES['datafile']['name'])){
    //seçilen dosya bilgilerinin alınması
    $isim = $_FILES['datafile']['name'];
    $yer = $_FILES['datafile']['tmp_name'];
    $tip = $_FILES['datafile']['type'];    

    //dosyanın resim olup olmadığı kontrolü
    if(($tip=='image/jpeg') || ($tip=='image/gif') || ($tip=='image/png')){
        //fonsksiyona bilgilerin gönderilmesi
        $k_resim = resim_kayit($isim,$yer,$tip,150,150);
        //resmin önizlemesi
        echo "<img src='{$k_resim}' />";
    }else{
        echo 'Lütfen resim dosyası seçin...';
    }
}

function resim_kayit($name,$resim,$tip,$r_genislik,$r_yukseklik){

    //resim bilgilerini alma
    list($gen, $yuk, $type) = getimagesize($resim);

    //en ve boy oranının hesaplanması
    $enOran = $r_genislik / $gen;
    $boyOran = $r_yukseklik / $yuk;

    //oranın ayarlanması
    if($enOran > $boyOran){
        $yEn = floor($gen * $enOran);
        $yBoy = floor($yuk * $enOran);
    }else{
        $yEn = floor($gen * $boyOran);
        $yBoy = floor($yuk * $boyOran);
    }

    //kesilmeye başlangıç noktalarının hesaplanaması
    $fEn = floor(0 - (($yEn - $r_genislik) / 2));
    $fBoy = floor(0 - (($yBoy - $r_yukseklik) / 2));

    //resmin türüne göre hafızaya alınma işlemi
    switch($tip){
        case 'image/jpeg':$o_img=imagecreatefromjpeg($resim);break;
        case 'image/gif':$o_img=imagecreatefromgif($resim);break;
        case 'image/png':$o_img=imagecreatefrompng($resim);break;
    }

    //renklerin belirlenmesi
    $g_img = imagecreatetruecolor($r_genislik, $r_yukseklik);

    //resmin kesilmesi
    imagecopyresampled($g_img,$o_img,$fEn,$fBoy,0,0,$yEn,$yBoy,$gen,$yuk);

    //resmin türüne göre oluşturulması
    switch($tip){
        case 'image/jpeg':imagejpeg($g_img, 'yeni_'.$name);break;
        case 'image/gif':imagegif($g_img, 'yeni_'.$name);break;
        case 'image/png':imagepng($g_img, 'yeni_'.$name);break;
    }

    //resmin kaynağını silme
    imagedestroy($o_img);
    imagedestroy($g_img);

    echo "Resminiz başarıyla yüklendi.<br />";
    //resmin yeni ismi
    $sonuc = 'yeni_'.$name;
    return $sonuc;
}
?>

Yukarıda yeni resmimizin oluşturulma ve yüklenme işlemini adım adım anlattım. Siz istediğiniz boyutta resimler oluşturabilirsiniz ya da form elemanlarıyla kullanıcıdan istediği resim büyüklük bilgisini alarak da resmini oluşturabilirsiniz. Bu arada uygulama sizde çalışmaz ise server ayarlarınızı kontrol edin. Nasıl ayarlama yapılacağını orantılı resim boyutlandırma yazımda anlatmıştım. Böylece uygulamamızın yapılması ve açıklanması burada bitmiş oldu. Yararlı olması dileğiyle.

 6.329 Okunma

Bu yazıya 18 yorum yapılmış.

  1. Faydalı bilgiler teşekkürler..

  2. gayet güzel ve başarılı bir anlatım olmuş.eline sağlık

  3. pekı bu kaydetmede hangı klasore kayıt edıyo acıklarmısınız acaba

    • Uygulamanın çalıştığı yere kaydediyor fotoğrafı. Ama siz bir klasör açıp (örneğin fotoğraflar klasörü) $sonuc = ‘fotograflar/yeni_’.$name; şeklinde kodda değişiklik yaparak, klasörün içine de resimleri kaydedebilirsiniz.

      • Güzel paylaşım eline sağlık, takipçinim.
        farklı bir dosyaya kaydetmek için switch yapısında da yol belirlenmeli, sadece $sonucta değil.

        case ‘image/jpeg’:imagejpeg($g_img, ‘fotograflar/yeni_’.$name);break;

  4. Merhabalar;

    PHP Resim upload yapmam gerekmekte bunu yapıyorum fakat aynı anda hem orjinalini hem de thumb kaydetmek istiyorum. buyukurl olarak kaydediyorum dosayayı hem dizine hem de veritabanına fakat anyı anda thumb olarak nasıl kaydedebilirim? Yardımlarınızı bekliyorum. Teşekkürler şimdiden 😉

    Kodlarım : http://pastebin.com/NTTD7U16

  5. İyi günler kolay gelsin.
    radyo sitemin alt sekmesinde bulunan galeri sayfasına kullanıcıların resim eklemesini istiyorum.
    thumbnail : 65×65 resim ise : 640×426 ebatında olacak ve resmi upload eder etmez jquery galeri kodlarının arasına girecek. yani yüklenen resim bunlar gibi olacak. bu sizin makalenizde bulunan kodlar ile bu mümkün müdür?

  6. Bu konuyla ilgili tüm gün araştırma yaptım ya çok detaylı anlatıp dağıtmışlar konuyu ya da hatalı kodları paylaşmışlar. Şimdi sizin yazınızı görüp uyguladım. Konuyu çok güzel özetlemiş ve sade bir şekilde kodları paylaşmışsınız 🙂 Teşekkür etmek istedim. 🙂
    Yazılarınızın devamını dilerim 🙂

  7. resim yükleme scriptinizi kullanıyorum ama eklemek istediğim bir alan var. resim yüklendikten sonra resim adresini nasıl ekrana yazdırırım?

    • $sonuc = ‘yeni_’.$name; kısmı resmin ismi oluyor. Sitenin hangi dizinine kaydettiysen, o kısmın da dosya yolunu ekleyip echo ile ekrana yazdır.

  8. Meraba. Bende şöyle bir hata çıkıyor. Örneğin JPEG formatında bir resmi küçültmek istediğimde
    case ‘image/jpeg’:$o_img=imagecreatefromjpeg($resim); bölümün de şöyle bir hata veriyor:

    “Allowed memory size of 25165824 bytes exhausted (tried to allocate 20736 bytes)”

    Niye böyle oluyor acaba ?

    • Max 2 MB boyuta izin veriyor serverınız. Değiştirip boyut büyüklüğünü artırın.

  9. Kodu başarılı çalıştırdım fakat büyük çözünürlükteki resimlerde hata veriyor sanırım deneyen var mı? nasıl çözerim?

    • Çözünürlükten değil dosya boyutu büyüklüğünden hata veriyordur servırınız. Default olarak 2 MB boyuta izin veriyordur. Dosya boyutunu php.ini dosyasından bulup artırın (max file upload size).

      • Aynen öyleymiş, yardımcı olduğunuz için ayrıca çok teşekkür ederim

  10. png resmi yüklerken arkası neden siyah çıkıyor.

  11. Resim yüklerken başarıyla yüklendi diye uyarı veriyor ama resim görünmüyor. Öğrenmek istediğim resss diye bir klasör oluşturup o klasöre yüklenmesini istiyorum, nasıl yapabilirim?
    Yardımlarınızı bekliyorum, şimdiden teşekkürler.

  12. Üstteki @kamilkarlı gibi bende de resim yüklendi diyor.
    Klasöre yazma izni vermeme rağmen ne resim o klasörde görünüyor, ne de resim yükleniyor. Acil yardım ama sanırım uzun zamandır cevap verilmemiş.

Yazı hakkında görüşlerinizi belirtmek istermisiniz?

Daha fazla Php
Kapat