欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

php等比例缩放图像不失真的实现代码

程序员文章站 2022-04-27 21:31:14
...
  1. /**
  2. * php图片剪切缩放函数参数说明:
  3. * $im 图片对象,需要用imagecreatefromjpeg()读取图片对象,如果php支持png、gif,可使用imagecreatefromgif(),imagecreatefrompng();
  4. * $maxwidth 定义生成图片的最大宽度(单位:像素)
  5. * $maxheight 生成图片的最大高度(单位:像素)
  6. * $name 生成的图片名称
  7. * $filetype 最终生成的图片类型(.jpg/.png/.gif)
  8. */
  9. function resizeimage($im, $maxwidth, $maxheight, $name, $filetype) {
  10. //读取需要缩放的图片实际宽高
  11. $pic_width = imagesx($im);
  12. $pic_height = imagesy($im);
  13. //通过计算实际图片宽高与需要生成图片的宽高的压缩比例最终得出进行图片缩放是根据宽度还是高度进行缩放,当前程序是根据宽度进行图片缩放。
  14. if (($maxwidth && $pic_width > $maxwidth) || ($maxheight && $pic_height > $maxheight)) {
  15. //如果实际图片的长度或者宽度小于规定生成图片的长度或者宽度,则要么根据长度进行图片缩放,要么根据宽度进行图片缩放。
  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 $ratio = $widthratio;
  26. else
  27. $ratio = $heightratio;
  28. }
  29. if ($resizewidth_tag && !$resizeheight_tag)
  30. $ratio = $widthratio;
  31. if ($resizeheight_tag && !$resizewidth_tag)
  32. $ratio = $heightratio;
  33. //计算最终缩放生成的图片长宽。
  34. $newwidth = $pic_width * $ratio;
  35. $newheight = $pic_height * $ratio;
  36. //根据计算出的最终生成图片的长宽改变图片大小,有两种改变图片大小的方法:
  37. //imagecopyresized()函数在所有gd版本中有效,但其缩放图像的算法比较粗糙。
  38. //imagecopyresamples(),其像素插值算法得到的图像边缘比较平滑,但该函数的速度比imagecopyresized()慢。
  39. if (function_exists("imagecopyresampled")) {
  40. $newim = imagecreatetruecolor($newwidth, $newheight);
  41. imagecopyresampled($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
  42. } else {
  43. $newim = imagecreate($newwidth, $newheight);
  44. imagecopyresized($newim, $im, 0, 0, 0, 0, $newwidth, $newheight, $pic_width, $pic_height);
  45. }
  46. //最终生成经过处理后的图片,如果需要生成gif或png,需要将imagejpeg()函数改成imagegif()或imagepng()
  47. $name = $name . $filetype;
  48. imagejpeg($newim, $name);
  49. imagedestroy($newim);
  50. } else {
  51. $name = $name . $filetype;
  52. imagejpeg($im, $name);
  53. }
  54. }
复制代码

说明: php gd库1.6.2版以前支持gif格式,但因gif格式使用lzw演算法牵涉专利权,因此在gd1.6.2版之后不支持gif的格式。 如果是 windows的环境,只要进入php.ini文件找到extension=php_gd2.dll,将#去除,重启apache即可,如果你是 linux环境,又想支持gif,png,jpeg,你需要去下载libpng,zlib,以及freetype字体并安装。