【发布时间】: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,这也很好。
【问题讨论】:
-
了解实际的
imagemagickshell 命令会很有趣,它是由这个 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