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。你可以通过测试我的命令行来检查。
我有一个网页,其中列出了应为 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。你可以通过测试我的命令行来检查。