Reputation: 1081
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 :)
Upvotes: 0
Views: 46
Reputation: 18660
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
Upvotes: 1