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);
    }
}
Cevap yaz
Cevaplar (5)
ilkertuncer
932 gün önce

Selamlar @codepacks rar'daki çalışmanızın sorunsuz haline ihtiyaç dymaktayım derdimi yeni konuda https://prototurk.com/soru/5732-gorsel-upload-ederken-piksel-bozulmasi-hatasi burada anlattım. Size ulaşabileceğim bir e-mail adresiniz bulunmakta mıdır?

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 -->
abdullahx
933 gün önce

Valla bunun için öyle uzun uzadıya kod yazmaya gerek duymuyorum ben, güzelce yapılmışları var. Bu adresteki yönergeleri takip edip sisteminizde kullanırsanız hem istediğiniz boyutlarda resim üretirsiniz hem de optimizasyon yapmış olursunuz.

codepacks
934 gün önce

sorun olursa yaz deyatlı sistemini inceleyim çözeriz

codepacks
934 gün önce

selam kardeşim
buyur kodları yeniden yazdım test ettim sıkıntısız çalışıyor
burdan indir
link
https://www108.zippyshare.com/v/tsjjl6qV/file.html