-
- *exif_imagetype -- Determine the type of an image
- *Description: The function is to crop an image into an image of any size without deformation
- *Parameter description: Enter the file name of the image to be processed , generate the save file name of the new image, generate the width of the new image, generate the height of the new image
- */
- // Get an image of any size, stretch the missing parts, no deformation, no blank space
- function my_image_resize($src_file , $dst_file , $new_width , $new_height) {
- $new_width= intval($new_width);
- $new_height=intval($new_width);
- 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 by a large ratio and reduce by a large ratio (the reduced ratio will be smaller)
- if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
- if($ratio_w < $ratio_h) {
- $ratio = $ratio_h ; // Case 1, the ratio of width to height is small, crop or enlarge it according to the height ratio standard
- }else {
- $ratio = $ratio_w ;
- }
- // Define an intermediate temporary image whose aspect ratio just meets the target requirements
- $inter_w=( int)($new_width / $ratio);
- $inter_h=(int) ($new_height / $ratio);
- $inter_img=imagecreatetruecolor($inter_w , $inter_h);
- //var_dump($inter_img);
- 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);
- //var_dump($new_img);exit();
- 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 Picture, one side is smaller than the original picture, first enlarge the ordinary image, and then crop
- // =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 image in the middle, 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);
- // Scale the original image and then crop 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
- my_image_resize('test.gif','11111.gif','100px','100px');
- ?>
Copy the code
Editor’s summary:
The PHP image cropping function implemented above flexibly applies the relevant functions of the PHP gd library, including the usage of imagecreatefromjpeg, imagecreatefrompng, imagecreatefromgif, imagecreatetruecolor and other functions.
Therefore, flexibly mastering the usage of each function in the PHP gd library is crucial for the realization of functions such as cropping pictures, watermarks, and thumbnails.
|