【问题标题】:Imagemagick how to apply gravity and extent to only short imagesImagemagick如何将重力和范围仅应用于短图像
【发布时间】:2019-11-18 00:21:03
【问题描述】:

我有一个网页,其中列出了应为 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

这给了我想要的这类图片(短图片)。但是,居中的这种效果也适用于其他图像(较大的图像)!有什么办法可以防止吗?

更新:

只是为了说明我的意思,我编了这个例子……如果我不添加范围和重力,图像将从左上角开始

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

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

解决方案:

我最终在 ruby​​ 中使用 system 函数使用 shell 命令

system "convert #{image.path} -crop 1024x1024+0+0 -resize 600x600 -background white -gravity center -extent 600x600 output.png"

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

【问题讨论】:

  • 了解实际的imagemagick shell 命令会很有趣,它是由这个 dsl 构造生成的。
  • @FaZeUnempl0yedd 它应该是这样的:convert image -crop 1200x1200+0+0 -resize 600x600 -background white -gravity center -extent 600x600 result 我也更新了我的问题以显示我得到的示例和示例
  • 我建议您先将输入图像的大小调整为 1024x1024,然后裁剪并添加 +repage。 PNG图像需要重新页面,但JPG不需要删除虚拟画布。调整大小将优化图像占用的空间。对于较小的图像,这将防止过多的填充。对于较大的图像,它将避免中心裁剪。
  • @fmw42 您建议将大小调整为 1024x1024 对我不起作用,它使图像变窄并以白色填充(右侧和左侧)居中....但最重要的是简单的命令有效,所以我更喜欢使用 shell 命令:) 我在下面接受了你的问题,再次感谢你!非常感谢您的帮助

标签: ruby-on-rails imagemagick minimagick


【解决方案1】:

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

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。你可以通过测试我的命令行来检查。

【讨论】:

  • 我在裁剪后添加了重新页面但没有工作,而且我在裁剪上有 +0+0 偏移量(对不起,我忘了在我的问题中写它),我编辑了我的问题给你看一个例子我的意思...希望现在很清楚
  • 发布输入,以便我可以使用它进行测试。如果你使用 -gravity 西北或不使用重力怎么办?
  • 输入是什么意思?图片?
  • 是的,但我很快就会根据我的输入发布与您的输入类似的内容。
  • 如果我摆脱 -gravity 大图像不会居中,这就是我想要的,但是如果一个较小的图像,空白(范围)将被添加到底部并且图像不会'不要居中,我希望小图像居中,并将白色空间/颜色添加到顶部和底部
猜你喜欢
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多