我们经常会遇到对图像进行裁剪动作,下面这段代码就是裁剪的源码
处理方法是:
1.当原图的宽或高任一比规定的尺寸小,只进行等比缩略处理,
2.当原图的宽与高都比规定尺寸大,先进行等比缩略处理,然后算出居中位置进行裁剪
<?php /* * $o_photo 原图路径 * $d_photo 处理后图片路径 * $width 定义宽 * $height 定义高 * 调用方法 cutphoto("test.jpg","temp.jpg",256,146); */ functioncutphoto($o_photo, $d_photo, $width, $height) { $temp_img= p_w_picpathcreatefromjpeg($o_photo); $o_width= p_w_picpathsx($temp_img); //取得原图宽 $o_height= p_w_picpathsy($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= p_w_picpathcreatetruecolor($newwidth, $newheight); p_w_picpathcopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height); p_w_picpathjpeg($new_img, $d_photo); p_w_picpathdestroy($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= p_w_picpathcreatetruecolor($newwidth, $newheight); p_w_picpathcopyresampled($new_img, $temp_img, 0, 0, 0, 0, $newwidth, $newheight, $o_width, $o_height); p_w_picpathjpeg($new_img, $d_photo); p_w_picpathdestroy($new_img); $temp_img= p_w_picpathcreatefromjpeg($d_photo); $o_width= p_w_picpathsx($temp_img); //取得缩略图宽 $o_height= p_w_picpathsy($temp_img); //取得缩略图高 //裁剪图片 $new_imgx= p_w_picpathcreatetruecolor($width, $height); p_w_picpathcopyresampled($new_imgx, $temp_img, 0, 0, $x, $y, $width, $height, $width, $height); p_w_picpathjpeg($new_imgx, $d_photo); p_w_picpathdestroy($new_imgx); } } cutphoto("http://tp3.sinaimg.cn/1700691210/180/1280120708/1", "temp1.jpg", 100, 100); ?>
内容出处 : http://www.17php.org/article-11.html