5
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 )

这就是我想要做的:我有一个大小为 600x1000px 的图像,我想在将该图像调整为 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** )

It is cropping the image just fine, but it isn't resizing it correctly. I never got it to match what I see in my image editor (the GIMP). What am I doing wrong? I confirmed that all the numbers are correct, but it's always shifted up or down no matter what I do.

4

2 回答 2

10

这是我使用 PHP GD 将任何大小的图像调整为任意大小的函数的链接。它有一个解释,以及使用裁剪以适应或信箱来适应目标纵横比的选项。

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 表示从左上角开始的像素数。

于 2011-01-08T02:02:57.070 回答
3

是的,这很好地解决了它。

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

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

所以变量实际上的含义如下: $src_x = 原始正方形左上角的 x 坐标。由于原始文件的大小是要从中提取拇指的调整大小版本的两倍,因此这将是 200 ((original_width / resized_width) * x)。

$src_y = 相同的东西,但带有 y 坐标。

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

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

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

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


dqhendricks:非常感谢您的帮助,我非常感谢。我为此苦苦思索了好几个小时。

于 2011-01-08T14:19:08.923 回答