Home  >  Article  >  Backend Development  >  PHP implementation code for proportionally scaling images without distortion

PHP implementation code for proportionally scaling images without distortion

WBOY
WBOYOriginal
2016-07-25 08:51:35911browse
  1. /**
  2. * PHP image cutting and scaling function parameter description:
  3. * $im image object, you need to use imagecreatefromjpeg() to read the image object. If PHP supports png and gif, you can use imagecreatefromgif(), imagecreatefrompng();
  4. * $maxwidth definition The maximum width of the generated image (unit: pixel)
  5. * $maxheight The maximum height of the generated image (unit: pixel)
  6. * $name The name of the generated image
  7. * $filetype The final generated image type (.jpg/.png/.gif )
  8. */
  9. function resizeimage($im, $maxwidth, $maxheight, $name, $filetype) {
  10. //Read the actual width and height of the image that needs to be scaled
  11. $pic_width = imagesx ($im);
  12. $pic_height = imagesy($im);
  13. //By calculating the compression ratio of the actual image width and height and the width and height of the image to be generated, it is finally concluded whether the image scaling is based on width or height. The current program The image is scaled based on width.
  14. if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
  15. //If the length or width of the actual image is smaller than the specified length or width of the generated image, then either Scale the image based on length, or scale the image based on width.
  16. if ($maxwidth && $pic_width > $maxwidth) {
  17. $widthratio = $maxwidth / $pic_width;
  18. $resizewidth_tag = true;
  19. }
  20. if ($maxheight && $pic_height > $maxheight) {
  21. $heightratio = $maxheight / $pic_height;
  22. $resizeheight_tag = true;
  23. }
  24. if ($resizewidth_tag && $resizeheight_tag) {
  25. if ($widthratio < $heightratio)
  26. $ratio = $widthratio;
  27. else
  28. $ratio = $heightratio;
  29. }
  30. if ($resizewidth_tag && !$resizeheight_tag)
  31. $ratio = $widthratio;
  32. if ($resizeheight_tag && !$resizewidth_tag)
  33. $ratio = $heightratio;
  34. //Calculate the length and width of the image generated by the final scaling.
  35. $newwidth = $pic_width * $ratio;
  36. $newheight = $pic_height * $ratio;
  37. //Change the image size based on the calculated length and width of the final generated image. There are two ways to change the image size:
  38. //imagecopyresized The () function is valid in all gd versions, but its algorithm for scaling images is rough.
  39. //imagecopyresamples(), the image edges obtained by its pixel interpolation algorithm are relatively smooth, but the speed of this function is slower than imagecopyresized().
  40. if (function_exists("imagecopyresampled")) {
  41. $newim = imagecreatetruecolor($newwidth, $newheight);
  42. imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
  43. } else {
  44. $newim = imagecreate($newwidth, $newheight);
  45. imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height) ;
  46. }
  47. //Finally generate the processed image. If you need to generate gif or png, you need to change the imagejpeg() function to imagegif() or imagepng()
  48. $name = $name . $filetype;
  49. imagejpeg($ newim, $name);
  50. imagedestroy($newim);
  51. } else {
  52. $name = $name . $filetype;
  53. imagejpeg($im, $name);
  54. }
  55. }
Copy code

Description : PHP 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 it is a Windows environment, just 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 and zlib , and freetype fonts and install them.



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