图片处理函数imagecopyresampled详细说明

#1 ryk007

这个函数我一直搞不清楚到底是怎么切图片的,比如我有一张大图,我要取里面的一部分存储为一个新的文件,我想实现的效果是
http://deepliquid.com/projects/Jcrop/demos.php?demo=thumbnail
这个页面里面左边选取了一部分在右边显示,当选取确定以后我点击一个按钮,他就把图片选择的部分给切出来。

2011-03-01 17:33:31

#2 jake

PHP手册的中文说明
http://php.net/manual/zh/function.imagecopyresampled.php

2011-03-01 18:43:36

#3 ryk007

哎~~还是没有搞懂这个东西,下面是我的图片
我想截取中间的100
f.jpg
我想切这一部分
f.jpg
我现在用的是下面的代码

 $ifn = "f.jpg";//源图片
$ofn = $this->makeuuid() . ".jpg";//生成一个名字
$source = imagecreatefromjpeg($ifn);
$sourceWidth = imagesx($source);
$sourceHeight = imagesy($source);
$thumbWidth = 100;
$thumbHeight = 100;
$thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);
$a = imagecopyresampled($thumb, $source, 0, 0, 104, 68, $thumbWidth, $thumbWidth, $sourceWidth, $sourceHeight);
imagejpeg($thumb, $ofn);


但是切出来的效果不对如下:
1b4419b7bbd3fbce5b824b3973ad52e6.jpg

请指教一下~

2011-03-02 09:39:20

#4 jake

$ifn = "f.jpg";//源图片
$ofn = "aaa.jpg";//生成一个名字
$source = imagecreatefromjpeg($ifn);
$sourceWidth = imagesx($source);
$sourceHeight = imagesy($source);
$thumbWidth = 100;
$thumbHeight = 100;
$thumb = imagecreatetruecolor($thumbWidth, $thumbHeight);

$x = ($sourceWidth - $thumbWidth) / 2;
$y = ($sourceHeight - $thumbHeight) / 2;

$a = imagecopyresampled($thumb, $source,  0, 0, $x, $y, $sourceWidth, $sourceHeight, $sourceWidth, $sourceHeight);
imagejpeg($thumb, $ofn);


注意一下,这里代码是只切图中间是100x100区域,而且是绝对中间,和你上面画的红框的图不同(那图的红框不在中间,而且也不是100x100)

正中间的100x100应该是:
aaa.jpg


imagecopyresampled函数
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h )

$dst_image:新建的图片
$src_image:需要载入的图片
$dst_x:设定需要载入的图片在新图中的x坐标
$dst_y:设定需要载入的图片在新图中的y坐标

$src_x:设定载入图片要载入的区域x坐标
$src_y:设定载入图片要载入的区域y坐标
$dst_w:设定载入的原图的宽度(在此设置缩放)
$dst_h:设定载入的原图的高度(在此设置缩放)
$src_w:原图要载入的宽度
$src_h:原图要载入的高度

2011-03-02 10:06:16

#5 ryk007

谢谢jake,新的问题又出来了,
比如我现在想截取任意长和宽,比如截取200×200像素的区域,但是还是保存到100×100像素里面,怎么操作呢?

2011-03-02 10:49:01

#6 jake

可以慢慢调整 imagecopyresampled 的多个参数来试验出需要的截图。

2011-03-02 10:55:15

#7 ryk007

恩,前两天把基本的做出来了,用了一个jquery的插件来做的现在可以实现选择一个区域,点击剪切开始切图。还有一个后期加工,比如上传任意图片和保存路径的问题没有弄。等后面开始做的时候开始修改。切图.rar

2011-03-08 17:10:39