PHP'de Resmi Upload Ederken Küçültme İşlemi Sonrası Kalitesinin Bozulması
Merhabalar. Ben bir resim upload ederken küçültülmüş halinin görüntü kalitesinin ayarı %100 de olmasına rağmen çok ciddi bir şekilde bozuluyor.
Aldığım çıktı şu şekilde: https://prnt.sc/35C8KU80fumL
Resmin orjinali: https://prnt.sc/2gytP5_LmFU4
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);
}
}
Merhabalar @codepacks yardımların için minnettağrım. Son attığın cevaptaki rar'ı indirdim ve kodlarını çalıştırdım fakat hala resmi küçülttüğümde kalitesi bozuk olarak küçültüyor.
Ben resmimi 271 x 150 ebatında küçülteceğim.
Resmin el ile manuel olarak yüksekliği ve genişiliği girilerek 271 x 150 şeklinde küçültülmüş hali: https://prnt.sc/a9zWwnzBToGR
Sizin yazdığınız sistem ile 271 x 150 şeklinde küçültülmüş hali: https://prnt.sc/naT6BwWtmXpP
Umarım resmin renk bozukluğunu iyi bir şekilde açıklayabilmişimdir. Bu sorun nasıl çözülebilir?
Kodum:
<?php
error_reporting(E_ALL);
$host = 'localhost';
$db = 'lpanel';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';
$options = [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
\PDO::ATTR_EMULATE_PREPARES => false,
];
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
try {
$pdo = new \PDO($dsn, $user, $pass, $options);
} catch (\PDOException $e) {
throw new \PDOException($e->getMessage(), (int)$e->getCode());
}
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;
}
//Create Thumb Image
function create_thumb_image($target_folder ='',$thumb_folder = '', $thumb_width = '',$thumb_height = '')
{
//folder path setup
$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);
}
}
?>
<?php
if(isset($_POST['submit'])){
$file_name= str_replace(" ","-",$_FILES['resim']['name']);
$resim=rand(0,99999)."_".$file_name;
$tpath1='images/'.$resim;
$pic1=compress_image($_FILES["resim"]["tmp_name"], $tpath1, 90);
$thumbpath='thumbs/'.$resim;
$thumb_pic1=create_thumb_image($tpath1,$thumbpath,'271','150');
$file_name= str_replace(" ","-",$_FILES['resim_kucuk']['name']);
$resim_kucuk=rand(0,99999)."_".$file_name;
$data = [
'resim' => $resim
];
$sql = "INSERT INTO posts (image_url) VALUES (:resim)";
$stmt= $pdo->prepare($sql);
$stmt->execute($data);
header( "Location:index.php");
exit;
}
?>
<div class="content-page">
<div class="content">
<!-- Start Content-->
<div class="container-fluid">
<div class="row">
<div class="col-12">
<div class="card">
<div class="card-body">
<h4 class="header-title">File Upload</h4>
<form action="" method="post" enctype="multipart/form-data">
<div class="fallback">
<input type="file" name="resim" data-height="300" />
</div>
</div> <!-- end card-body-->
</div> <!-- end card-->
</div><!-- end col -->
</div>
<!-- end row -->
<div class="form-group">
<div class="col-md-9 col-md-offset-4">
<button type="submit" name="submit" class="btn btn-primary">Save</button>
<button type="reset" class="btn btn-danger">Clear</button>
</div>
</div>
</form>
</div> <!-- container -->
</div> <!-- content -->