Php ile veritabanına görsel yüklerken farklı 2 boyutta küçültülerek (croplanmadan) farklı iki klasöre ve veritabanına yüklenmesi
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ı?
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (4)
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?
sorunuza en yakın cevap burada yanıtlamıştım
https://prototurk.com/soru/5717-php-de-resim-yuklerken-genisligini-ve-yuksekligini-kucultme
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.