23十二/116
php制作图片缩略图,不失真
在使用相册封面,幻灯片时,如果图片没有进行过处理经常会出现失真的情况,页面会显的很难看。
今天在开发phpwind的群组相册时就遇到了同样的问题,在网上找了许多相关资料,有许多相关的制作裁剪图片的程序,不过做的还不够理想,或者说不能满足我们项目的要求,于是在这些基础上我
写了一段小程序。举个列子说明:
比如有一张500*600的图片,需要制作成100*100的缩略图,要求是不能失真!
程序执行过程是,先判断原图的尺寸缩放成100*120的图片,然后再从左上角截取成100*100的图片。
但图片宽或者是高不足100时,程序会以不足100的高或宽为准,生成缩略图,例如:90*200的图片就会生成90*100的图片,也就是宽不变,沿着高截取100像素
若是高宽均不是100的时候就直接用图片当成缩略图。
程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | /** *等比列截取图片生成缩略图 *$width需要缩放的宽度 *$height需要缩放的高度 *$filename文件来源 *$imagename生成后的文件名 *$size缩放形式,small为缩放后的图片不超过设置的高宽,big为缩放后的图片不小于设置的高宽 */ function get_img($width,$height,$filename,$imagename,$size='small'){ list($width_orig, $height_orig) = getimagesize($filename); if($width_orig { $w=$width_orig; $h=$height_orig; }elseif($width_orig$height){ $w=$width_orig; $h=$height; }elseif($width_orig>$width&&$height_orig $w=$width; $h=$height_orig; }else { $w=$width; $h=$height; } if($size=='big'){ if ($width && ($width_orig < $height_orig)) { $height = ($width / $width_orig) * $height_orig; } else { $width = ($height / $height_orig) * $width_orig; } }elseif($size='small'){ if ($width && ($width_orig < $height_orig)) { $width = ($height / $height_orig) * $width_orig; } else { $height = ($width / $width_orig) * $height_orig; } }else{ echo '参数错误';exit; } $image_p = imagecreatetruecolor($w, $h); $type = strtolower(substr(strrchr($filename,"."),1)); if($type == 'jpeg') $type = 'jpg'; switch($type){ case 'bmp': $image = imagecreatefromwbmp($filename); break; case 'gif': $image = imagecreatefromgif($filename); break; case 'jpg': $image = imagecreatefromjpeg($filename); break; case 'png': $image = imagecreatefrompng($filename); break; default : return "Unsupported picture type!"; } imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); imagejpeg($image_p, $imagename, '100'); } //使用范例 get_img(100,100,'img/1.jpg','img/2.jpg','big'); |