v2.5.2
Giriş yap

PHP'de Resmi Upload Ederken Küçültme İşlemi Sonrası Kalitesinin Bozulması

ilkertuncer
366 defa görüntülendi

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);
    }
}
ilkertuncer
933 gün önce

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 -->