【问题标题】:imagecopyresampled to resize and crop an image - not returning the expected resultimagecopyresampled 调整图像大小和裁剪图像 - 不返回预期结果
【发布时间】:2011-06-05 15:20:56
【问题描述】:
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** )

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

【问题讨论】:

  • 您在源图像中所做的是在 600 像素宽度中从 left-x = 100 像素切割到 right-x = 400 像素,因此它没有居中。然后在 1000 像素的总高度中使用 120 像素的顶部 y 和 620 像素的底部 y,因此它也不会以这种方式居中。
  • 然后,在您的目标图像中,您从左上角开始,将 300x500 像素的图像打印成 100x100 的图像,所以我想右边的 200 像素和底部的 400 像素被切断了。
  • 从您的图像编辑器中向我们展示所需的源图像和目标图像,也许我们会更清楚地了解您要做什么。

标签: php crop image-resizing


【解决方案1】:

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

对于 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:非常感谢您的帮助,非常感谢。我为此苦苦思索了好几个小时。

【讨论】:

  • 没问题。很高兴我能帮上忙。
【解决方案2】:

这是我使用 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 表示从左上角算起的像素数。

【讨论】:

  • 您好,我对 ImageCreateTrueColor 有疑问。我可以给超过 3000 的高度和宽度吗?
  • @user2003356 理论上是可以的,但这取决于你服务器的 php 内存限制。
猜你喜欢
  • 1970-01-01
  • 2022-07-13
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多