RMagick - 如何创建具有自动高度的缩略图?

时间:2014-01-25 15:37:20

标签: ruby-on-rails ruby image-processing imagemagick rmagick

我正在使用RMagick创建这样的缩略图:

    img = Magick::Image.read(image_url).first
    target = Magick::Image.new(110, 110) do
      self.background_color = 'white'
    end
    img.resize_to_fit!(110, 110)
    target.composite(img, Magick::CenterGravity, Magick::CopyCompositeOp).write(thumb_path)

效果很好 - 我会加载当前图像,为新拇指创建一个“空格”,然后将其放在那里。

但是,我需要创建一个拇指,宽度 110px ,高度会自动计算......怎么做?

谢谢

3 个答案:

答案 0 :(得分:0)

您宁可使用resize_to_fill!

Doc here

答案 1 :(得分:0)

image = Magick::Image.read(image_url).first
image.format = "JPG"
image.change_geometry!("110X110") { |cols, rows| image.thumbnail! cols, rows }
image.write("<path to save thumbnail>")

答案 2 :(得分:0)

事实证明这非常简单! ImageMagick和GraphicsMagick都能正确保持宽高比,因此在您的情况下,只需给出您想要图像的最大宽度。请参阅http://www.imagemagick.org/script/command-line-processing.php#geometry以了解有关magick维度运算符的更多信息。

如果你发现你是ruby进程'RAM消耗正在增长,你可能想要切换到外部执行图像库,如https://github.com/mceachen/micro_magick。此外,切换到GraphicsMagick是一个全方位的胜利,BTW,在更短的时间内提供更好的图像编码。

require 'micro_magick'
img = MicroMagick::Convert.new("input.png")
img.resize("110") # this restricts to width, if you want to restrict to height, use "x345"
img.unsharp(1.5) # This runs an "unsharp mask" convolution filter, and is optional
img.write("output.png")