Home >Backend Development >PHP Tutorial >How to crop images to a fixed size in PHP

How to crop images to a fixed size in PHP

WBOY
WBOYOriginal
2016-07-25 09:13:09984browse

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

  1. /*
  2. * Description: The function is to crop an image to an image of any size without deformation of the image
  3. * 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
  4. * written by smallchicken
  5. * time 2008-12-18
  6. */
  7. // Get an image of any size, stretch the missing parts, no deformation, no leaving Blank
  8. function my_image_resize($src_file, $dst_file , $new_width , $new_height) {
  9. if($new_width <1 || $new_height <1) {
  10. echo "params width or height error !";
  11. exit() ;
  12. }
  13. if(!file_exists($src_file)) {
  14. echo $src_file . " is not exists !";
  15. exit();
  16. }
  17. // Image type
  18. $type=exif_imagetype($src_file);
  19. $ support_type=array(IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_GIF);
  20. if(!in_array($type, $support_type,true)) {
  21. echo "this type of image does not support! only support jpg , gif or png";
  22. exit( );}} L // Load Image
  23. switch ($ Type) {
  24. Case ImageType_JPEG:
  25. $ SRC_IMG = ImageCreateFromjpeg ($ src_file);
  26. case imagepe _Png: s $ src_img = ImageCreateFrompng ($ src_file);
  27. Bream;
  28. case IMAGETYPE_GIF :
  29. $src_img=imagecreatefromgif($src_file);
  30. break;
  31. default:
  32. echo "Load image error!";
  33. exit();
  34. }
  35. $w=imagesx($src_img);
  36. $h= imagesy($src_img);
  37. $ratio_w=1.0 * $new_width / $w;
  38. $ratio_h=1.0 * $new_height / $h;
  39. $ratio=1.0;
  40. // 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)
  41. if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > }else {
  42. $ratio = $ratio_w ;
  43. }
  44. // Define an intermediate temporary image whose aspect ratio exactly meets the target requirements
  45. $inter_w=(int)($new_width / $ratio);
  46. $inter_h =(int) ($new_height / $ratio);
  47. $inter_img=imagecreatetruecolor($inter_w , $inter_h);
  48. imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
  49. // Generate a temporary image with the maximum side length as the size of the target image $ratio
  50. // Define a new image
  51. $new_img=imagecreatetruecolor($new_width,$new_height);
  52. imagecopyresampled($new_img,$inter_img, 0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
  53. switch($type) {
  54. case IMAGETYPE_JPEG :
  55. imagejpeg($new_img, $dst_file,100); // Store image
  56. break ;
  57. case IMAGETYPE_PNG:
  58. imagepng($new_img,$dst_file,100);
  59. break;
  60. case IMAGETYPE_GIF:
  61. imagegif($new_img,$dst_file,100); / end if 1
  62. // 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
  63. // =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
  64. else{
  65. $ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; //Take the value with the larger ratio
  66. // Define an intermediate Large image, the height or width of the image is equal to the target image, and then enlarge the original image
  67. $inter_w=(int)($w * $ratio);
  68. $inter_h=(int) ($h * $ratio);
  69. $inter_img=imagecreatetruecolor($inter_w, $inter_h);
  70. //Crop the original image after scaling it
  71. imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h );
  72. // Define a new image
  73. $new_img=imagecreatetruecolor($new_width,$new_height);
  74. imagecopy($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
  75. switch( $type) {
  76. case IMAGETYPE_JPEG :
  77. imagejpeg($new_img, $dst_file,100); // Store image
  78. break;
  79. case IMAGETYPE_PNG :
  80. imagepng($new_img,$dst_file,100);
  81. break;
  82. case IMAGETYPE_GIF :
  83. imagegif($new_img,$dst_file,100);
  84. break;
  85. default:
  86. break;
  87. }
  88. }// if3
  89. }// end function
  90. ?>
  91. Copy code
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn