trt4324 发表于 2014-5-14 22:12:21

php进行图片裁剪及生成缩略图程序源代码

我们经常会遇到对图像进行裁剪动作,下面这段代码就是裁剪的源码
处理方法是:
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);


页: [1]
查看完整版本: php进行图片裁剪及生成缩略图程序源代码