When making a home page call image, sometimes it is necessary to obtain a fixed size image, because the image position of the home page is usually specified by the designer. If it is to call the latest release image, because it is not known what proportion of the image the customer will upload, so, Sometimes there is no way to determine the proportion of the image. Front-end page writers usually use a method of fixing the height and width of the img element to control the image from overflowing. However, if the proportion of the image is not the required proportion, it will cause the image to be deformed after being called. It greatly affects the beauty of the page. One solution is to scale it according to the proportion of the original image. The scaled image will inevitably have blank spaces. Fill the blank spaces with color. In this way, although the image will not be deformed, there will be a lot of distortion. Problem, for example, if the user sends an image that is very tall but has an average width, and if it is compressed into a 1:1 image, then the image will basically not be visible after compression.
My solution here is to crop any image to a fixed size, the image will not be deformed, and the blank space will be stretched and filled. The image will always be filled with no blank space. Friends who have used bcastr should know that bcastr guarantees image calling. Without deformation, for a fixed-size output image frame, the source image has the following situations:
1: The height and width of the image to be output are smaller than the height and width of the source image, written as judgment $new_width<$src_width && $new_height<$src_width
2: The height and width of the image to be output are larger than the height and width of the original image, written as judgment $new_width>$src_width && $new_height>$src_width
3: Exclude the 1st and 2nd two kind, that is, the situation of zooming in and zooming out at the same time plus the judgment of equality
For 1 and 2, the function processing code is exactly the same, so it can be summarized into a processing statement
gives the PHP implementation code
Copy code The code is as follows:
/*
* Description: The function is to crop an image into an image of any size without deformation of the image
* Parameter description: Enter the file that needs to be processed. Name, generate the save file name of the new image, generate the width of the new image, generate the height of the new image
* written by smallchicken
* time 2008-12-18
*/
// Get any Large or small images, stretched where necessary, no deformation, no blank space
function my_image_resize($src_file, $dst_file , $new_width , $new_height) {
if($new_width <1 || $new_height < ;1) {
echo "params width or height error !";
exit();
}
if(!file_exists($src_file)) {
echo $src_file . " is not exists !";
exit();
}
// Image type
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo "this type of image does not support! only support jpg , gif or png";
exit();
}
//Load image
switch($type) {
case IMAGETYPE_JPEG :
$src_img=imagecreatefromjpeg($src_file);
break;
case IMAGETYPE_PNG :
$ src_img=imagecreatefrompng($src_file);
break;
case IMAGETYPE_GIF :
$src_img=imagecreatefromgif($src_file);
break;
default:
echo "Load image error! ";
exit();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $new_width / $w ;
$ratio_h=1.0 * $new_height / $h;
$ratio=1.0;
// The height and width of the generated image are smaller or larger than the original ones. The principle is to enlarge at a larger ratio , reduce by a large ratio (the reduction ratio is relatively small)
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // Case 1, the width ratio is smaller than the height direction, crop or enlarge according to the height ratio standard
}else {
$ratio = $ratio_w ;
}
// Define an intermediate temporary image whose aspect ratio exactly meets the target requirements
$inter_w=(int)($new_width / $ratio );
$inter_h=(int) ($new_height / $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
imagecopy($inter_img, $src_img, 0,0,0 ,0,$inter_w,$inter_h);
// Generate a temporary image with the maximum side length as the target image $ratio ratio
// Define a new image
$new_img=imagecreatetruecolor ($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); // Store image
break;
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
break;
case IMAGETYPE_GIF :
imagegif($new_img,$dst_file,100);
break;
default:
break;
}
} // end if 1
// 2 One side of the target image is larger than the original image, and one side is smaller than the original image. First enlarge the plain image, and then crop it
// =if( ($ratio_w < 1 && $ratio_h > 1 ) || ($ratio_w >1 && $ratio_h <1) )
else{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; //Take the value with the larger ratio
//Define a large intermediate image whose height or width is equal to the target image, and then enlarge the original image
$inter_w=(int)($w * $ratio);
$inter_h=( int) ($h * $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
//Crop the original image after scaling
imagecopyresampled($inter_img,$src_img,0, 0,0,0,$inter_w,$inter_h,$w,$h);
//Define a new image
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy($ new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
switch($type) {
case IMAGETYPE_JPEG :
imagejpeg($new_img, $dst_file,100); / / Store image
break;
case IMAGETYPE_PNG :
imagepng($new_img,$dst_file,100);
break;
case IMAGETYPE_GIF :
imagegif($new_img,$dst_file, 100);
break;
default:
break;
}
}// if3
}// end function
?>
http://www.bkjia.com/PHPjc/320499.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/320499.htmlTechArticleTo make a homepage call image, sometimes it is necessary to obtain a fixed size image, because the image position of the homepage is usually determined by the design The personnel have been designated. If the latest released image is called,...