设为首页 收藏本站
查看: 538|回复: 0

[经验分享] php 实现图片等比例缩放 原理(初级)

[复制链接]

尚未签到

发表于 2017-4-9 12:59:44 | 显示全部楼层 |阅读模式
  主要说明下几个用到的函数:
  imagecreatefromjpeg()返回一图像标识符,代表了从给定的文件名取得的图像。
  intimagesx( resource image) 返回image所代表的图像的宽度。
  intimagesy( resource image) 返回image所代表的图像的高度。
  boolfunction_exists( string function_name) 定义指定的函数则返回 true 值,其它情形均返回 false 值。
  imagecreatetruecolor()返回一个图像标识符,代表了一幅大小为x_sizey_size的黑色图像。
  imagecreate()返回一个图像标识符,代表了一幅大小为x_sizey_size的空白图像。
  intimagecopyresampled( resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
  imagecopyresized 与上面方法相同,区别见下面说明:
与上面的参数相同

  
  int srcW, int srcH) 重采样拷贝部分图像并调整大小
  $dst_image:新建的图片
  $src_image:需要载入的图片
  $dst_x:设定需要载入的图片在新图中的x坐标
  $dst_y:设定需要载入的图片在新图中的y坐标
  $src_x:设定载入图片要载入的区域x坐标
  $src_y:设定载入图片要载入的区域y坐标
  $dst_w:设定载入的原图的宽度(在此设置缩放)
  $dst_h:设定载入的原图的高度(在此设置缩放)
  $src_w:原图要载入的宽度
  $src_h:原图要载入的高度
  ImageCopyResized()函数在所有GD版本中有效,但其缩放图像的算法比较粗糙。ImageCopyResamples(),其像素插值算法得到的图像边缘比较平滑,但该函数的速度比ImageCopyResized()慢。
  
  imagejpeg()image图像以filename为文件名创建一个JPEG图像。
  imagedestroy()释放与image关联的内存。
  
  实例:
  <?php  header("Content-Type:text/html;charset=utf-8");  $im = imagecreatefromjpeg('oldsrc.jpg');  $maxwidth = 75;  $maxheight = 75;  $name = 'newpic';  $filetype = '.jpg';  $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);  }          ?>  

特别说明:
  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字体并安装。
  OK,PHP图片压缩函数完成,最后我们概述一下整个处理的思路:
  通过计算实际图片的长宽与规定生成图片的长宽之间的缩放比例,根据实际的需求(按照宽度还是按照高度进行图片缩放)计算出最终生成图片的大小,然后应用PHP图片处理函数对图片进行处理,最后输出图片。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-362437-1-1.html 上篇帖子: php 截图(可预览) crop images thumb jcrop/asido 下篇帖子: php学习笔记(十一)文件上传类的编写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表