> 백엔드 개발 > PHP 튜토리얼 > 왜곡 없이 이미지 크기를 비례적으로 조정하는 PHP 구현 코드

왜곡 없이 이미지 크기를 비례적으로 조정하는 PHP 구현 코드

WBOY
풀어 주다: 2016-07-25 08:51:35
원래의
936명이 탐색했습니다.
  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 < $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. //计算最终缩放生成的图片长宽。
  35. $newwidth = $pic_width * $ratio;
  36. $newheight = $pic_height * $ratio;
  37. //根据计算出的最终生成图片的长宽改变图片大小,有两种改变图片大小的方法:
  38. //imagecopyresized()函数在所有gd版本中有效,但其缩放图像的算法比较粗糙。
  39. //imagecopyresamples(),其像素插值算法得到的图像边缘比较平滑,但该函数的速度比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. //最终生成经过处理后的图片,如果需要生成gif或png,需要将imagejpeg()函数改成imagegif()或imagepng()
  48. $name = $name . $filetype;
  49. imagejpeg($newim, $name);
  50. imagedestroy($newim);
  51. } else {
  52. $name = $name . $filetype;
  53. imagejpeg($im, $name);
  54. }
  55. }
复制代码

说明: 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字体并安装。



원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿