Imagemagick 如何将重力和范围仅应用于短图像

Imagemagick how to apply gravity and extent to only short images

我有一个网页,其中列出了应为 600 像素 x 600 像素(宽度和高度)的图像。所以我使用 imagemagick 将所有大图像调整为 600x600,效果很好。

但是,当我调整某些图像的大小时(为了保持它们的纵横比),它们会被调整为高度小于 600 像素的尺寸(例如 600x450)。所以我尝试使用 imagemagick 选项(重力、背景和范围)来填充所需的高度,如下所示:

image.combine_options do |img|
    img.crop('1200x1200+0+0')
    img.resize '600x600'
    img.background 'white'
    img.extent '600x600'
    img.gravity 'center'
end

这给了我想要的这类图像(短图像)。然而,这种 centering 的效果也适用于其他图像(更大的图像)!有什么办法可以防止这种情况发生吗?

更新:

为了向您展示我的意思,我编写了这个示例...如果我不添加范围和重力,图像将从左上角开始

但如果我添加范围和重力(中心),图像将从中心开始,像这样:

我只希望调整后的图像小于 600x600 的图像居中,但在您看到的示例中,即使调整到精确的 600x600 的图像也会居中!!这不是我想要的

解决方法:

我最终在 ruby

中使用 system 函数使用 shell 命令
system "convert #{image.path} -crop 1024x1024+0+0 -resize 600x600 -background white -gravity center -extent 600x600 output.png"

效果很好!我不知道为什么 minimagick 不能正常工作,但我只是从我的 gem 文件中删除了那个 gem,这也很好。

这是您在命令行 Imagemagick 中的命令,在裁剪后正确重置了虚拟 canvas。

convert image -crop 1200x1200+0+0 +repage -resize 600x600 -background white -gravity center -extent 600x600 result

这是调整大小参数略有不同的两个结果。看起来您的命令使用的是 resize 参数上设置的 ^ 标志的等价物。

输入:

没有 ^ 标志的正确结果:(注释用白色填充)

convert wiki.png -crop 1200x1200+0+0 +repage -resize 600x600 -background white -gravity center -extent 600x600 result1.png


带有 ^ 标志的结果:(注意裁剪)

convert wiki.png -crop 1200x1200+0+0 +repage -resize 600x600^ -background white -gravity center -extent 600x600 result2.png


以上是Unix语法。对于 Windows,将 ^ 加倍为 ^^,因为 ^ 是 Windows.

中的转义字符

也许您的问题出在 minimagick 而不是 Imagemagick。你可以通过测试我的命令行来检查。