首页 > 解决方案 > Don't don't why the image quality is not 100%

问题描述

The code below uploads image files to a directory. I've spent some time looking into this. It seems to be changing the image quality to like 70-80%. I can't figure out what is going on with it. I wanna keep the image quality to 100%.

I've tried replacing:

ImageJpeg ($resized_img,"$path_thumbs/$rand_name.$file_ext");

to:

ImageJpeg ($resized_img,"$path_thumbs/$rand_name.$file_ext" 100);

That didn't seem to work!


Here is my code:

if(isset($_POST['submit']))
{

    //make sure this directory is writable!
    $path_thumbs = "backgrounds/";

    //the new width of the resized image, in pixels.
    $img_thumb_width = 1920; // 

    $extlimit = "yes"; //Limit allowed extensions? (no for all extensions allowed)
    //List of allowed extensions if extlimit = yes
    // $limitedext = array(".gif",".jpg",".png",".jpeg",".bmp");
    $limitedext = array(".jpg");

    //the image -> variables
    $file_type = $_FILES['vImage']['type'];
    $file_name = $_FILES['vImage']['name'];
    $file_size = $_FILES['vImage']['size'];
    $file_tmp = $_FILES['vImage']['tmp_name'];

    // No upload size limit
    ini_set('memory_limit', '-1');

    //check if you have selected a file.
    if(!is_uploaded_file($file_tmp)){
        echo "Please select a file to upload! <a href=\"$_SERVER[PHP_SELF]\">Try again</a>";
        exit(); //exit the script and don't process the rest of it!
    }
    //check the file's extension
    $ext = strrchr($file_name,'.');
    $ext = strtolower($ext);
    //uh-oh! the file extension is not allowed!
    if (($extlimit == "yes") && (!in_array($ext,$limitedext))) {
        echo "Wrong file extension. Make sure the file is a JPG file! <br>--<a href=\"$_SERVER[PHP_SELF]\">Try again..</a>";
        exit();
    }
    //so, whats the file's extension?
    $getExt = explode ('.', $file_name);
    $file_ext = $getExt[count($getExt)-1];

    //create a random file name
    // $rand_name = md5(time());
    // $rand_name= rand(0,999999999);
    $rand_name = 'default';
    //the new width variable
    $ThumbWidth = $img_thumb_width;

    //////////////////////////
    // CREATE THE THUMBNAIL //
    //////////////////////////

    //keep image type
    if($file_size){
        if($file_type == "image/pjpeg" || $file_type == "image/jpeg"){
            $new_img = imagecreatefromjpeg($file_tmp);
        }elseif($file_type == "image/x-png" || $file_type == "image/png"){
            $new_img = imagecreatefrompng($file_tmp);
        }elseif($file_type == "image/gif"){
            $new_img = imagecreatefromgif($file_tmp);
        }
        //list the width and height and keep the height ratio.
        list($width, $height) = getimagesize($file_tmp);
        //calculate the image ratio
        $imgratio=$width/$height;
        if ($imgratio>1){
            $newwidth = $ThumbWidth;
            $newheight = $ThumbWidth/$imgratio;
        }else{
                $newheight = $ThumbWidth;
                $newwidth = $ThumbWidth*$imgratio;
        }
        //function for resize image.
        if (function_exists(imagecreatetruecolor)){
        $resized_img = imagecreatetruecolor($newwidth,$newheight);
        }else{
                die("Error: Please make sure you have GD library ver 2+");
        }
        //the resizing is going on here!
        imagecopyresized($resized_img, $new_img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
        //finally, save the image
        ImageJpeg ($resized_img,"$path_thumbs/$rand_name.$file_ext");
        ImageDestroy ($resized_img);
        ImageDestroy ($new_img);


    }

    //ok copy the finished file to the thumbnail directory
    move_uploaded_file ("$path_big/$rand_name.$file_ext", $file_tmp);

Any help is appreciated :)

标签: php

解决方案


Your problem seems to be: imagecopyresized which will copy and scale the image and it uses a fairly primitive algorithm that tends to yield more pixelated results.

  • imagecopyresampled will copy and scale and image, it uses a smoothing and pixel interpolating algorithm that will generally yield much better results then imagecopyresized at the cost of a little cpu usage.

  • imagecopy will copy but will not scale the image.

Try imagecopyresampled or just imagecopy and compare the results.

Took this info from here


推荐阅读