So I know this question has been asked before, but I'm having trouble understanding how to implement the way to prevent an image from loosing it's transparent backgrounds.
My script allows me to set up a way to create thumbnails, and resize the uploaded image.
So here is my code below, can someone help me? Please and thank you! :)
Resize Function:
function normal_resize_image($source, $destination, $image_type, $max_size, $image_width, $image_height, $quality){
if($image_width <= 0 || $image_height <= 0){return false;} //return false if nothing to resize
//do not resize if image is smaller than max size
if($image_width <= $max_size && $image_height <= $max_size){
if(save_image($source, $destination, $image_type, $quality)){
return true;
}
}
//Construct a proportional size of new image
$image_scale = min($max_size/$image_width, $max_size/$image_height);
$new_width = ceil($image_scale * $image_width);
$new_height = ceil($image_scale * $image_height);
$new_canvas = imagecreatetruecolor( $new_width, $new_height ); //Create a new true color image
//Copy and resize part of an image with resampling
if(imagecopyresampled($new_canvas, $source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height)){
save_image($new_canvas, $destination, $image_type, $quality); //save resized image
}
return true;
}
function thumb_resize_image($source, $destination, $image_type, $max_size, $image_width, $image_height, $quality){
if($image_width <= 0 || $image_height <= 0){return false;} //return false if nothing to resize
//do not resize if image is smaller than max size
if($image_width <= $max_size && $image_height <= $max_size){
if(save_image($source, $destination, $image_type, $quality)){
return true;
}
}
//Construct a proportional size of new image
$image_scale = min($max_size/$image_width, $max_size/$image_height);
$new_width = ceil($image_scale * $image_width);
$new_height = ceil($image_scale * $image_height);
$new_canvas = imagecreatetruecolor( $new_width, $new_height ); //Create a new true color image
//Copy and resize part of an image with resampling
if(imagecopyresampled($new_canvas, $source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height)){
save_image($new_canvas, $destination, $image_type, $quality); //save resized image
}
return true;
}
##### This function corps image to create exact square, no matter what its original size! ######
function crop_image_square($source, $destination, $image_type, $square_size, $image_width, $image_height, $quality){
if($image_width <= 0 || $image_height <= 0){return false;} //return false if nothing to resize
if( $image_width > $image_height )
{
$y_offset = 0;
$x_offset = ($image_width - $image_height) / 2;
$s_size = $image_width - ($x_offset * 2);
}else{
$x_offset = 0;
$y_offset = ($image_height - $image_width) / 2;
$s_size = $image_height - ($y_offset * 2);
}
$new_canvas = imagecreatetruecolor( $square_size, $square_size); //Create a new true color image
//Copy and resize part of an image with resampling
if(imagecopyresampled($new_canvas, $source, 0, 0, $x_offset, $y_offset, $square_size, $square_size, $s_size, $s_size)){
save_image($new_canvas, $destination, $image_type, $quality);
}
return true;
}
##### Saves image resource to file #####
function save_image($source, $destination, $image_type, $quality){
switch(strtolower($image_type)){//determine mime type
case 'image/png':
imagepng($source, $destination); return true; //save png file
break;
case 'image/gif':
imagegif($source, $destination); return true; //save gif file
break;
case 'image/jpeg': case 'image/pjpeg':
imagejpeg($source, $destination, $quality); return true; //save jpeg file
break;
default: return false;
}
}
Here is the upload code:
$sm_square_size = 300; //will ! be cropped
$md_square_size = 600; //will ! be cropped
$max_image_size = 1200; //Maximum image size (height and width)
$lg_prefix = "_lg"; //Large thumb Prefix
$md_prefix = "_md"; //Medium thumb Prefix
$sm_prefix = "_sm"; //Small thumb Prefix
$destination_folder = 'images/post_images/'; //upload directory ends with / (slash)
$jpeg_quality = 90; //jpeg quality
$image_name = $_FILES['image_file']['name']; //file name
//IF IMAGE UPLOADED
if($image_name != "") {
$image_size = $_FILES['image_file']['size']; //file size
$image_temp = $_FILES['image_file']['tmp_name']; //file temp
$image_size_info = getimagesize($image_temp); //get image size
if($image_size_info){
$image_width = $image_size_info[0]; //image width
$image_height = $image_size_info[1]; //image height
$image_type = $image_size_info['mime']; //image type
} else {
die("Make sure image file is valid!");
}
//switch statement below checks allowed image type
//as well as creates new image from given file
switch($image_type){
case 'image/png':
$image_res = imagecreatefrompng($image_temp); break;
case 'image/gif':
$image_res = imagecreatefromgif($image_temp); break;
case 'image/jpeg': case 'image/pjpeg':
$image_res = imagecreatefromjpeg($image_temp); break;
default:
$image_res = false;
}
if($image_res){
//Get file extension and name to construct new file name
$image_info = pathinfo($image_name);
$image_extension = strtolower($image_info["extension"]); //image extension
$image_name_only = strtolower($image_info["filename"]);//file name only, no extension
$dateRec = date('d-M-Y-h-i-s');
//create a random name for new image (Eg: fileName_293749.jpg) ;
$new_file_name = $dateRec. '_' . rand(0, 9999999999);
//folder path to save resized images and thumbnails
$thumb_save_folder = $destination_folder.$new_file_name.$sm_prefix.'.'.$image_extension;
$medium_save_folder = $destination_folder.$new_file_name.$md_prefix.'.'.$image_extension;
$large_save_folder = $destination_folder.$new_file_name.$lg_prefix.'.'.$image_extension;
//call normal_resize_image() function to proportionally resize image
if(normal_resize_image($image_res, $large_save_folder, $image_type, $max_image_size, $image_width, $image_height, $jpeg_quality)) {
//call crop_image_square() function to create square thumbnails
if(!thumb_resize_image($image_res, $thumb_save_folder, $image_type, $sm_square_size, $image_width, $image_height, $jpeg_quality))
{ die('Error Creating thumbnail'); }
if(!thumb_resize_image($image_res, $medium_save_folder, $image_type, $md_square_size, $image_width, $image_height, $jpeg_quality))
{ die('Error Creating thumbnail'); }
$post_img_lg_New = $new_file_name.$lg_prefix.'.'.$image_extension;
$post_img_md_New = $new_file_name.$md_prefix.'.'.$image_extension;
$post_img_sm_New = $new_file_name.$sm_prefix.'.'.$image_extension;
$stmt = $mysqli->prepare('UPDATE HERE');
$stmt->bind_param('is', $results);
$stmt->execute();
$stmt->close();
}
}
//IF NO IMAGE UPLOADED
}
See my answer here:
Trouble keeping transparency with upload script
I posted the answer below here too:
function resizeImage($source, $destination, $image_type, $max_size, $image_width, $image_height, $quality) {
//RETURN FALSE IF NOTHING TO RESIZE
if($image_width <= 0 || $image_height <= 0){return false;}
//CHECK IF SMALLER THAN THE MAX SIZES
if($image_width <= $max_size && $image_height <= $max_size) { //IF SMALLER THAN MAX SIZES
$new_width = $image_width;
$new_height = $image_height;
} else { //ELSE CONSTRUCT PROPORTIONAL SIZE OF NEW IMAGE
$image_scale = min($max_size/$image_width, $max_size/$image_height);
$new_width = ceil($image_scale * $image_width);
$new_height = ceil($image_scale * $image_height);
}
$new_canvas = imagecreatetruecolor($new_width, $new_height);
$black = imagecolorallocate($new_canvas, 0, 0, 0);
imagecolortransparent($new_canvas, $black);
imagealphablending($new_canvas,false);
imagesavealpha($new_canvas, true);
if(imagecopyresampled($new_canvas, $source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height)){
$this->save_image($new_canvas, $destination, $image_type, $quality);
}
return true;
}
//Resize Image Normal
function normal_resize_image($source, $destination, $image_type, $max_size, $image_width, $image_height, $quality) {
//RETURN FALSE IF NOTHING TO RESIZE
if($image_width <= 0 || $image_height <= 0){return false;}
//CHECK IF SMALLER THAN THE MAX SIZES
if($image_width <= $max_size && $image_height <= $max_size) { //IF SMALLER THAN MAX SIZES
$new_width = $image_width;
$new_height = $image_height;
} else { //ELSE CONSTRUCT PROPORTIONAL SIZE OF NEW IMAGE
$image_scale = min($max_size/$image_width, $max_size/$image_height);
$new_width = ceil($image_scale * $image_width);
$new_height = ceil($image_scale * $image_height);
}
$new_canvas = imagecreatetruecolor($new_width, $new_height);
$black = imagecolorallocate($new_canvas, 0, 0, 0);
imagecolortransparent($new_canvas, $black);
imagealphablending($new_canvas,false);
imagesavealpha($new_canvas, true);
if(imagecopyresampled($new_canvas, $source, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height)){
$this->save_image($new_canvas, $destination, $image_type, $quality);
}
return true;
}