php non-deformed zoom image:
function resizeImage($im,$maxwidth,$maxheight,$name,$filetype) { $pic_width = imagesx($im); $pic_height = imagesy($im); if(($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) { if($maxwidth && $pic_width>$maxwidth) { $widthratio = $maxwidth/$pic_width; $resizewidth_tag = true; } if($maxheight && $pic_height>$maxheight) { $heightratio = $maxheight/$pic_height; $resizeheight_tag = true; } if($resizewidth_tag && $resizeheight_tag) { if($widthratio<$heightratio) $ratio = $widthratio; else $ratio = $heightratio; } if($resizewidth_tag && !$resizeheight_tag) $ratio = $widthratio; if($resizeheight_tag && !$resizewidth_tag) $ratio = $heightratio; $newwidth = $pic_width * $ratio; $newheight = $pic_height * $ratio; if(function_exists("imagecopyresampled")) { $newim = imagecreatetruecolor($newwidth,$newheight); imagecopyresampled($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); } else { $newim = imagecreate($newwidth,$newheight); imagecopyresized($newim,$im,0,0,0,0,$newwidth,$newheight,$pic_width,$pic_height); } $name = $name.$filetype; imagejpeg($newim,$name); imagedestroy($newim); } else { $name = $name.$filetype; imagejpeg($im,$name); } }
Parameter description:
$im image object, before applying the function, you need to use imagecreatefromjpeg() to read it Get the image object. If the PHP environment supports PNG and GIF, you can also use imagecreatefromgif(), imagecreatefrompng();
$maxwidth defines the maximum width of the generated image (unit: pixel)
$maxheight Maximum height of the generated image (unit: pixel)
$name Generated image name
$filetype Final generated image type (.jpg/.png/.gif)
Code Comments:
Lines 3~4: Read the actual width and height of the image that needs to be scaled
Lines 8~26: Calculate the actual width and height of the image and the width and height of the image to be generated The compression ratio ultimately determines whether the image scaling is based on width or height. The current program scales the image based on width. If you want to scale the image based on height, you can change the statement on line 22 to $widthratio>$heightratio
Lines 28~31: If the length or width of the actual image is smaller than the length or width of the generated image specified Width, then either the image will be scaled based on the length or the image will be scaled based on the width.
Lines 33~34: Calculate the length and width of the final zoomed image.
Lines 36~45: Change the image size according to the calculated length and width of the final generated image. There are two ways to change the image size: The ImageCopyResized() function is valid in all GD versions, but it scales the image. The algorithm is relatively rough. ImageCopyResamples(), the image edges obtained by its pixel interpolation algorithm are relatively smooth, but the speed of this function is slower than ImageCopyResized().
Line 47~49: The processed image is finally generated. If you need to generate GIF or PNG, you need to change the imagejpeg() function to imagegif() or imagepng()
Lines 51~56: If the length and width of the actual image are smaller than the specified length and width of the generated image, keep the image as it is. Similarly, if you need to generate GIF or PNG, you need to change the imagejpeg() function to imagegif() or imagepng ().
Special Note:
GD library version 1.6.2 previously supported the GIF format, but because the GIF format uses the LZW algorithm and involves patent rights, the GIF format is not supported after GD version 1.6.2. . If you are in a WINDOWS environment, you only need to enter the PHP.INI file and find extension=php_gd2.dll, remove the #, and restart APACHE. If you are in a Linux environment and want to support GIF, PNG, and JPEG, you need to download libpng , zlib, and freetype fonts and install them.
Recommended: php server
The above is the detailed content of php zoom image without deformation. For more information, please follow other related articles on the PHP Chinese website!