v2.5.2
Giriş yap

Php ile veritabanına görsel yüklerken farklı 2 boyutta küçültülerek (croplanmadan) farklı iki klasöre ve veritabanına yüklenmesi

ilkertuncer
431 defa görüntülendi

Ben php ile veritabanına görsel yüklerken farklı 2 boyutta küçültülerek (croplanmadan) farklı boyutlarda farklı klasörlere ve veritabanına yüklemek istiyorum. Bunun için önerebileceğiniz bir kaynak veya bir kütüphane var mı?

Cevap yaz
Cevaplar (4)
ilkertuncer
989 gün önce

Merhabalar @codepacks.İlginiz için teşekkür ederim. Yaptığınız kod çalışıyor fakat resmin quality'sini %100 yapmama rağmen görünmeyecek halde bozuyor.
Aldığım çıktı şu şekilde: https://prnt.sc/35C8KU80fumL
Resmin orjinali: https://prnt.sc/2gytP5_LmFU4

Ayrıca Dosayı küçültünce çıkan hatam:

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 34

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 37

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 40

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 43

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 50

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line 54

Warning: Undefined variable $file_ext in C:\xampp\htdocs\photo\upload.php on line <57></57>

KODUM:

   <?php

    $file_name= str_replace(" ","-",$_FILES['resim']['name']);
    $resim=rand(0,99999)."_".$file_name;
    //orjinal halinde kayıt yeri (images/)
    $tpath1='images/'.$resim;
    $pic1=compress_image($_FILES["resim"]["tmp_name"], $tpath1, 90);
    
    //kırpılmış halinde kayıt yeri
    $thumbpath='images/small/'.$resim;
    $thumb_pic1=create_thumb_image($tpath1,$thumbpath,'470','260'); // kaydedilecek resim boyutu değiştirilebilir
    $file_name= str_replace(" ","-",$_FILES['resim']['name']);
    $resim_cover=rand(0,99999)."_".$file_name;
    
    function compress_image($source_url, $destination_url, $quality) {
        $info = getimagesize($source_url);
        if ($info['mime'] == 'image/jpeg')
            $image = imagecreatefromjpeg($source_url);
        elseif ($info['mime'] == 'image/gif')
            $image = imagecreatefromgif($source_url);
        elseif ($info['mime'] == 'image/png')
            $image = imagecreatefrompng($source_url);
        imagejpeg($image, $destination_url, $quality);
        return $destination_url;
    }
    function create_thumb_image($target_folder ='',$thumb_folder = '', $thumb_width = '',$thumb_height = ''){
        $target_path = $target_folder;
        $thumb_path = $thumb_folder;
        $thumbnail = $thumb_path;
        $upload_image = $target_path;
        list($width,$height) = getimagesize($upload_image);
        $thumb_create = imagecreatetruecolor($thumb_width,$thumb_height);
        switch($file_ext){
            case 'jpg':
                $source = imagecreatefromjpeg($upload_image);
                break;
            case 'jpeg':
                $source = imagecreatefromjpeg($upload_image);
                break;
            case 'png':
                $source = imagecreatefrompng($upload_image);
                break;
            case 'gif':
                $source = imagecreatefromgif($upload_image);
                break;
            default:
                $source = imagecreatefromjpeg($upload_image);
        }
        imagecopyresized($thumb_create, $source, 0, 0, 0, 0, $thumb_width, $thumb_height, $width,$height);
        switch($file_ext){
            case 'jpg' || 'jpeg':
                imagejpeg($thumb_create,$thumbnail,100);
                break;
            case 'png':
                imagepng($thumb_create,$thumbnail,100);
                break;
            case 'gif':
                imagegif($thumb_create,$thumbnail,100);
                break;
            default:
                imagejpeg($thumb_create,$thumbnail,100);
        }
    }
    
    

Bu konuda ne yapabilirim?

codepacks
989 gün önce
rephp7
994 gün önce

Verot işini görür mü acaba? Tayfun hocanın anlatımı vardı. Bu linke bak istersen.

ebykdrms
994 gün önce

Görselleri doğrudan veritabanında tutmak yerine görsellerin dosya adlarını veritabanında tutmanız daha uygun olacaktır. Genellikle böyle yapılır.
Görselin PHP tarafında yeniden boyutlandırılması konusu burada işlenmiş: yusufsezer.com.tr/php-resim-boyutlandirma

Burada örneğin telefondan çekilmiş 5mb boyutlu bir fotoğrafın önce sunucuya upload edilmesi, sonra PHP tarafından işlenmesi durumu var. Bu kaynak yönetimi açısından maliyetli bir işlem.
Upload etmeden önce boyut kontrolü de yapsanız bu sefer de kullanıcılar upload işleminden önce görseli düzenlemekle uğraşmak zorunda kalırlar.

Benim tavsiyem görseli front-end tarafında boyutlandırmanız ve tam istediğiniz boyutlarda büyük ve küçük görselleri upload etmenizdir.
Bu adreste görselin front-end tarafında nasıl boyutlandırılacağı örneklendirilmiş: imagekit.io/blog/how-to-resize-image-in-javascript
Burada görseli alıp bir <canvas></canvas> elementi içinde yeniden boyutlandırıyor ve yeni oluşan görüntüyü bir <img /> elementine basıp gösteriyor. Sizin kodu kendinizce düzenlemeniz gerekecek.
Görselleri alan PHP kodunun yalnızca boyut ve ebat kontrolü yapması sunucuya daha az yük bindirmiş olur.