Dragonfly/imagemagick 调整大小和裁剪,并可能添加白色填充
Posted
技术标签:
【中文标题】Dragonfly/imagemagick 调整大小和裁剪,并可能添加白色填充【英文标题】:Dragonfly/imagemagick resize and crop and maybe add white padding 【发布时间】:2015-02-06 14:04:21 【问题描述】:使用蜻蜓,我可以做到以下几点:
image.thumb('300x300#')
这将调整图像大小,保持纵横比并居中裁剪(有效地切掉最长边的末端)。
但是,如果图像的边缘小于 300 像素,则会向上缩放。我更喜欢的是,在这种情况下,图像不会调整大小,而是在必要时添加白色填充。
所以基本上,如果两个边缘都是 300 像素或以上,我希望 300x300#
的正常行为,但如果任何边缘小于 300 像素,则图像根本不会调整大小,但仍会裁剪为 300x300,并在其中添加空格必要的。
这是否可以使用 Dragonfly 的内置处理器(#thumb
或 #convert
?或者我需要构建自己的处理器?如果是这样,我需要查看什么样的 imagemagick 命令?
【问题讨论】:
【参考方案1】:最好的解决方案是创建一个 300x300 的白色画布图像,然后在画布图像顶部合成您的图像,居中。然后用重心(居中)裁剪它。这将产生一个 300x300 的图像,其中任何垂直或水平边缘上的白色画布尺寸小于 300。
** 对于这个解决方案,您可能需要安装 RMagick gem,因为我不相信 Dragonfly 已经扩展了您需要的 ImageMagick 操作。
这就是我的处理方式:
#Set file path first and load a white image called canvas that is 300x300 into Imagmagik
canvas_file_path = "#Rails.root/app/assets/images/canvas.png"
canvas_image = Magick::Image.read(canvas_file_path).first
#Then perform the compositing operation. This overlays your image on top of the canvas, center gravity ensures that your image is centered on the canvas.
canvas_image.composite!(<YOUR IMAGE>, CenterGravity, Magick::OverCompositeOp)
#then write the file to a temporary file path so you can do something with it
temporary_file_path = "#Rails.root/tmp/#@model.id"
canvas_image.write(temporary_file_path)
一定要在你的文件中加上require语句,注意大小写,是RMagick不是Rmagick
require "RMagick"
此处参考文档中的 ImageMagick 示例,以执行您需要的合成操作
composite -gravity center smile.gif rose: rose-over.png
关于如何合成图像的 Rmagick 文档 - http://www.imagemagick.org/RMagick/doc/image1.html#composite
Rmagick 宝石 - https://github.com/rmagick/rmagick
ImageMagick 对合成的参考 - http://www.imagemagick.org/script/composite.php
【讨论】:
感谢您抽出宝贵时间回答我的问题。我真的不想引入任何其他依赖项,例如 rmagick。通过一些试验和错误,我找到了一种使用 Dragonfly 做我想做的事情的方法。将发布答案...【参考方案2】:我有回答自己的问题的习惯...
使用 Dragonfly 可以做到以下几点:
def thumb_url
if image.width < 300 || image.height < 300
image.convert('-background white -gravity center -extent 300x300').url
else
image.thumb('300x300#').url
end
end
【讨论】:
以上是关于Dragonfly/imagemagick 调整大小和裁剪,并可能添加白色填充的主要内容,如果未能解决你的问题,请参考以下文章