8

我正在使用 Imagemagick 调整图像大小和裁剪图像。

测试图像:

在此处输入图像描述

我需要将其重新调整为 300 x 320 帧的大小,首先我正在调整图像大小然后裁剪它,我正在使用以下命令:

exec("convert /uploadImagePath -thumbnail  300  /newImagePath");

exec("convert /newImagePath -gravity Center -crop 290x310+0+0 /newImagePath");

但它给了我以下图像

在此处输入图像描述

如您所见,图像不完整。我错在哪里?

4

2 回答 2

52

(答案已更新,现在为下面提供一个图解示例-liquid-rescale


您的原始图像尺寸为:

489 x 640 pixels

您想要的尺寸似乎是:

290 x 310 pixels

如果没有以下任何一项,这将无法扩展到这些维度:

  1. 裁剪(不要保留初始图像的所有区域)
  2. 保持所需的宽度(放弃所需的高度)
  3. 保持所需的高度(放弃所需的宽度)
  4. 失真(缩放时不要保持纵横比)
  5. 填充(向一个或多个边缘添加更多像素)
  6. 删除不明显的像素(“液体重新缩放”或“接缝雕刻” -参见维基百科

您的结果显示为“1”。(裁剪),你不喜欢。所以你有选项'2'。(保持宽度),'3。(保持高度),“4”。(失真),“5”。(填充)和“6”。(缝雕)留待测试。

'2.':保持所需的高度

convert WPTgp.jpg -resize x310 keep-height.jpg

结果图像的尺寸为237 x 310 pixels. (自动确定宽度)
Keep Height.... 保持高度

'3.':保持所需的宽度

convert WPTgp.jpg -resize 290x keep-width.jpg

结果图像的尺寸为290 x 380 pixels. (自动确定高度)
Keep Width..... 保持宽度

“4.”:失真

convert WPTgp.jpg -resize 290x310\! distorted.jpg

结果图像的尺寸为290 x 310 pixels. (忽略纵横比——如果需要适合尺寸,则扭曲图像)
Distorted...... 扭曲的

“5.”:填充

convert WPTgp.jpg \
   -resize 290x310 \
   -gravity center \
   -background orange \
   -extent 290x310 \
    padded.jpg

结果图像的尺寸为290 x 310 pixels. (添加橙色背景只是为了证明图像的“扩展”确实有效。) (保持纵横比 - 将图像扩展为所需尺寸)
Padded......... 软垫

'6.':接缝雕刻

convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

以上将是您从快速阅读 ImageMagick 命令选项参考中自发得出的命令。但是,它效果不佳,而是我使用了:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

下面进一步解释了为什么我需要修改它....对不起 - 我现在无法提供示例图片;这需要安装额外的 ImageMagick 委托(液体重新缩放库),我目前没有) 我现在有机会创建原始图像的“液体重新缩放”版本。
Liquid-rescaled '流动'重新调整
liblqr


关于接缝雕刻的注意事项 / '-liquid-rescale'

如上所述,最后一个图像不是我最初提出的命令的结果,而是以下两个修改版本之一的结果:

convert WPTgp.jpg -liquid-rescale 599x640\! -scale 290x310 liquid.jpg
convert WPTgp.jpg -liquid-rescale 599x640\! -scale 48.4%   liquid.jpg

请记住,我们有一个 489x610 像素的原始图像,我们希望将其缩放到 290x310 像素。但-liquid-rescale不擅长同时在两个维度上重新缩放——它被设计为仅缩放到一个方向(水平或垂直)。如果你尝试同时做这两个,结果可能不是你所期望的。这是最初建议的命令的结果:

 convert WPTgp.jpg -liquid-rescale 290x310\! liquid.jpg

LQR gone wrong 液体重新调整出错了

这就是为什么我想出了两个修改后的命令,它们分两步工作:

  1. 首先,仅对水平尺寸应用液体缩放,将原件的宽度从 489 像素扩展到 599 像素。
  2. 其次,对中间结果应用“正常”纵横比保持缩放以生成最终图像。
于 2012-07-30T12:14:23.217 回答
4

尝试:

$inputFile = "WPTgp.jpg";
exec("convert {$inputFile} -resize 290x310^ -gravity Center -crop 290x310+0+0 picCropped.png");
于 2012-07-30T11:54:57.983 回答