php 实现图片等比例缩放 原理(初级)

主要说明下几个用到的函数:

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,你需要去下载libpngzlib,以及freetype字体并安装。

  OK,PHP图片压缩函数完成,最后我们概述一下整个处理的思路:

  通过计算实际图片的长宽与规定生成图片的长宽之间的缩放比例,根据实际的需求(按照宽度还是按照高度进行图片缩放)计算出最终生成图片的大小,然后应用PHP图片处理函数对图片进行处理,最后输出图片。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值