imagecopyresampled调整图像大小并裁剪图像 - 不返回预期结果

时间:2011-01-08 01:59:42

标签: php crop image-resizing

imagecopyresized ( 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 )

这就是我想要做的:我的图像尺寸为600x1000像素,我想在将图像尺寸调整为300x500px后创建一个100x100px的拇指,拇指正方形左上角的x坐标应为在100(src x)和120(src y)。

根据我从手册中理解的,命令应该是

$dst_image = imagecreatetruecolor(100,100);
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg');
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, **300 , 500 , 600 , 1000** )

正好裁剪图像,但没有正确调整图像大小。我从来没有把它与我在图像编辑器(GIMP)中看到的相匹配。我究竟做错了什么?我确认所有数字都是正确的,但无论我做什么,它总是向上或向下移动。

2 个答案:

答案 0 :(得分:10)

这是我使用PHP GD编写的函数的链接,用于将任何大小的图像调整为任意大小。它有一个解释,以及使用crop-to-fit或letterboxing来适应目标宽高比的选项。

http://www.spotlesswebdesign.com/blog.php?id=1

<强>更新

看起来应该更像这样。

$dst_image = imagecreatetruecolor(100,100);
$src_image = imagecreatefromjpeg('/home/sandbox/imagetoresize.jpg');
imagecopyresized ($dst_image, $src_image, 0, 0, 100, 120, 100, 100, 400, 400);

从源获取400x400平方,并将其复制到目标中的100x100方格。源方块的左上角是100 x和120 y。 x和y表示左上角的像素数。

答案 1 :(得分:3)

是的,很好地修复了它。

对于Google员工:我基本上需要做的是让源宽度和源高度链接到我将在源图像中裁剪的区域的实际宽度和高度。这意味着代码需要:

imagecopyresized ($dst_image, $src_image, 0, 0, 200, 240, 100, 100, 200, 200);

因此变量实际上意味着以下内容: $ src_x =原始正方形左上角的x坐标。由于原始尺寸是要从中提取拇指的调整大小版本的两倍,因此它将为200((ori​​ginal_width / resized_width)* x)。

$ src_y =同样的事情,但与y坐标。

$ dst_w =生成的缩略图的宽度 - 100。

$ dst_h =生成的缩略图的高度 - 100。

$ src_w =我将从原始区域裁剪的区域宽度((ori​​ginal_width / resized_width)* $ dst_w)

$ src_h =我将从原始裁剪区域的高度((ori​​ginal_width / resized_width)* $ dst_h)


dqhendricks:非常感谢你的帮助,我真的很感激。我几个小时都在摸不着头脑。