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

Jul 25, 2016 am 09:13 AM

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 of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
2 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Repo: How To Revive Teammates
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: How To Get Giant Seeds
4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

11 Best PHP URL Shortener Scripts (Free and Premium) 11 Best PHP URL Shortener Scripts (Free and Premium) Mar 03, 2025 am 10:49 AM

Long URLs, often cluttered with keywords and tracking parameters, can deter visitors. A URL shortening script offers a solution, creating concise links ideal for social media and other platforms. These scripts are valuable for individual websites a

Working with Flash Session Data in Laravel Working with Flash Session Data in Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

Build a React App With a Laravel Back End: Part 2, React Build a React App With a Laravel Back End: Part 2, React Mar 04, 2025 am 09:33 AM

This is the second and final part of the series on building a React application with a Laravel back-end. In the first part of the series, we created a RESTful API using Laravel for a basic product-listing application. In this tutorial, we will be dev

Simplified HTTP Response Mocking in Laravel Tests Simplified HTTP Response Mocking in Laravel Tests Mar 12, 2025 pm 05:09 PM

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

cURL in PHP: How to Use the PHP cURL Extension in REST APIs cURL in PHP: How to Use the PHP cURL Extension in REST APIs Mar 14, 2025 am 11:42 AM

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

12 Best PHP Chat Scripts on CodeCanyon 12 Best PHP Chat Scripts on CodeCanyon Mar 13, 2025 pm 12:08 PM

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

Announcement of 2025 PHP Situation Survey Announcement of 2025 PHP Situation Survey Mar 03, 2025 pm 04:20 PM

The 2025 PHP Landscape Survey investigates current PHP development trends. It explores framework usage, deployment methods, and challenges, aiming to provide insights for developers and businesses. The survey anticipates growth in modern PHP versio

Notifications in Laravel Notifications in Laravel Mar 04, 2025 am 09:22 AM

In this article, we're going to explore the notification system in the Laravel web framework. The notification system in Laravel allows you to send notifications to users over different channels. Today, we'll discuss how you can send notifications ov

See all articles