PHP代码
<?php /************************************************************************ * 函数名称:createSmallImg() * 函数说明:创建等比例图片 * 输入参数: $dir 保存路径 $source_img 原图片名称 $small_ex 缩率图文件名后缀 $maxwidth 最大宽度 $maxheight 最大高度 * 说 明:$maxwidth和$maxheight只能传递一个,如果传最大宽度将自动计算高度,如果传最大高度将自动计算宽度 * 返 回 值:如果创建成功返回文件保存的地址,否则返回false * 编 写 者:李小宇 * 编写时间:2011/8/18 **************************************************************************/ function createSmallImg($dir,$source_img,$small_ex="_s",$maxwidth='',$maxheight='') { if(!empty($maxwidth) && !empty($maxheight)) { return false; } $img_name=substr($source_img,0,-4); $img_ex = strtolower(substr(strrchr($source_img,"."),1)); /*注释的这段用作直接在浏览器上显示图片 $im=imagecreatefromjpeg($file); header("Content-type: image/jpeg"); imagejpeg($im);*/ switch($img_ex) { case "jpg": $src_img=imagecreatefromjpeg($dir.$source_img); break; case "gif": $src_img=imagecreatefromgif($dir.$source_img); break; case "png": $src_img=imagecreatefrompng($dir.$source_img); break; } $old_width=imagesx($src_img); $old_height=imagesy($src_img); if(!empty($maxheight) && $old_height>=$maxheight) { $new_height=$maxheight; $new_width=round(($old_width*$new_height)/$old_height); } elseif(!empty($maxwidth) && $old_width>=$maxwidth) { $new_width=$maxwidth; $new_height=round(($old_height*$new_width)/$old_width); } if(!empty($new_width) || !empty($new_height)) { $dst_img=imagecreatetruecolor($new_width,$new_height); imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_width,$new_height,$old_width,$old_height); $smallname=$dir.$img_name.$small_ex.".".$img_ex; switch($img_ex) { case "jpg": imagejpeg($dst_img,$smallname,100); break; case "gif": imagegif($dst_img,$smallname); break; case "png": imagepng($dst_img,$smallname); break; } } return $smallname; }
imagecopyresampled比imagecopyresized生成的图片更清晰
重采样拷贝部分图像并调整大小
imagecopyresampled() 将一幅图像中的一块正方形区域拷贝到另一个图像中,平滑地插入像素值,因此,尤其是,减小了图像的大小而仍然保持了极大的清晰度。成功时返回 TRUE, 或者在失败时返回 FALSE.