我们经常会遇到对图像进行裁剪动作,下面这段代码就是裁剪的源码

处理方法是:

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