When making a homepage call image, sometimes you need to obtain a fixed size image, because the image position of the homepage is usually specified by the designer. If you are making a latest release image call, because you don’t know what proportion of the image the customer will upload, so there is At that time, there is no way to determine the proportion of the image. Front-end page writers usually use the 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, which is very serious. It affects the beauty of the page to a great extent. One solution is to scale according to the proportion of the original image. The scaled image will inevitably have blank spaces. Fill the blank spaces with color. Although the image will not be deformed, there will be many problems. , for example, if the user sends an image that is very tall but of average width, and if it is compressed into a 1:1 image, then the image will basically not be visible after compression.
The solution 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 ensures that the image is not deformed when called. 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
3: Exclude the two types 1 and 2, that is, the situation of zooming in while zooming out, plus the judgment of equal.
For 1 and 2, the function processing codes are exactly the same, so they can be summarized into one processing statement
php implementation code
-
- /*
- * Description: The function is to crop an image to an image of any size without deformation of the image
- * Parameter description: Enter the file name of the image to be processed, and generate a new image to save File name, the width of the generated new image, the height of the generated new image
- * written by smallchicken
- * time 2008-12-18
- */
- // Get an image of any size, stretch the missing parts, no deformation, no leaving Blank
- 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( );}} L // Load Image
- switch ($ Type) {
- Case ImageType_JPEG:
- $ SRC_IMG = ImageCreateFromjpeg ($ src_file);
- case imagepe _Png: s $ src_img = ImageCreateFrompng ($ src_file);
- Bream;
- 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 than the original one , or both are large, the principle is to use a large ratio to enlarge, and use a large ratio to reduce (the reduced ratio will be smaller)
- if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > }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 size of the target image $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); / 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 an intermediate Large image, the height or width of the image 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 it
- 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
- ?>
-
-
- Copy code
-
-
-
-
-
-
-
-
-
|