我们经常会遇到对图像进行裁剪动作,下面这段代码就是裁剪的源码
处理方法是:
1.当原图的宽或高任一比规定的尺寸小,只进行等比缩略处理,
2.当原图的宽与高都比规定尺寸大,先进行等比缩略处理,然后算出居中位置进行裁剪
/* * $o_photo 原图路径 * $d_photo 处理后图片路径 * $width 定义宽 * $height 定义高 * 调用方法 cutphoto("test.jpg","temp.jpg",256,146); */ function cutphoto($o_photo, $d_photo, $width, $height) { $temp_img = imagecreatefromjpeg($o_photo); $o_width = imagesx($temp_img); //取得原图宽 $o_height = imagesy($temp_img); //取得原图高 //判断处理方法 if ($width > $o_width || $height > $o_height) { //原图宽或高比规定的尺寸小,进行压缩 $newwidth = $o_width; $newheight = $o_height; if ($o_width > $width) { $newwidth = $width; $newheight = $o_height * $width / $o_width; } if ($newheight > $height) { $newwidth = $newwidth * $height / $newheight; $newheight = $height; } //缩略图片 $new_img = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height); imagejpeg($new_img, $d_photo); imagedestroy($new_img); } else { //原图宽与高都比规定尺寸大,进行压缩后裁剪 if ($o_height * $width / $o_width > $height) { //先确定width与规定相同,如果height比规定大,则ok $newwidth = $width; $newheight = $o_height * $width / $o_width; $x = 0; $y = ($newheight - $height) / 2; } else { //否则确定height与规定相同,width自适应 $newwidth = $o_width * $height / $o_height; $newheight = $height; $x = ($newwidth - $width) / 2; $y = 0; } //缩略图片 $new_img = imagecreatetruecolor($newwidth, $newheight); imagecopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height); imagejpeg($new_img, $d_photo); imagedestroy($new_img); $temp_img = imagecreatefromjpeg($d_photo); $o_width = imagesx($temp_img); //取得缩略图宽 $o_height = imagesy($temp_img); //取得缩略图高 //裁剪图片 $new_imgx = imagecreatetruecolor($width, $height); imagecopyresampled($new_imgx, $temp_img, 0, 0, $x, $y, $width, $height, $width, $height); imagejpeg($new_imgx, $d_photo); imagedestroy($new_imgx); } } cutphoto("http://tp3.sinaimg.cn/1700691210/180/1280120708/1", "temp1.jpg", 100, 100); cutphoto("http://hhcf.tk/img/avatar_big/1318072877.jpg", "temp2.jpg", 100, 100);