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 调整大小和裁剪,并可能添加白色填充的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationBar 大标题在执行 segues 时不调整大小

Xcode:调整自动生成的大括号的缩进?

大数据--hive动态分区调整

pdf文件太大怎么变小如何调整

可以在旋转时自动调整视图的大小以尽可能大吗?

WOW大芒果3.13单机经验倍数调整,速度啊