Ruby on Rails 2.1 - RMagick 指南

Rails 提供对 ImageMagickGraphicsMagick 的绑定,这两个库都是流行且稳定的 C 库。RMagick 库针对 ImageMagick 和 GraphicsMagick 提供了相同的接口,因此使用哪一个并不重要。

您可以通过在 Unix 上安装 rmagick gen 或在 Windows 上安装 rmagick-win32 gem 来获取 RMagick。让我们在 Unix 机器上安装它,如下所示 −

$ gem install rmagick

RMagick 模块附带类 Magick::Image,它允许您使用四种不同的方法调整图像大小 −

  • resize(width, height)
  • scale(width, height)
  • sample(width, height)
  • thumbnail(width, height)

所有这些方法都接受一对整数值,对应于您想要的缩略图的宽度和高度(以像素为单位)。

示例

这是一个使用 resize() 方法调整图像大小的示例。它获取文件 tmp.jpg 并制作其宽 100 像素、高 100 像素的缩略图 −

require 'rubygems'
require 'RMagick'

class ImageController < ApplicationController

   def createThubnail
      width, height = 100, 100

      img =  Magick::Image.read('tmp.jpg').first
      thumb = img.resize(width, height)
	   
      # 如果你想保存此图像,请使用以下命令
      # thumb.write("mythumbnail.jpg")

      # 否则,按如下方式将其发送到浏览器
      send_data(thumb.to_blob, :disposition => 'inline', :type => 'image/jpg')
   end
end

以下是创建缩略图的步骤 −

  • 此处,类方法 Image.read 接收图像文件名作为参数并返回一个 Image 对象数组。您将获得该数组的第一个元素,这显然是我们的 tmp.jpg 图像。

  • 接下来,我们使用所需参数调用方法 resize,即创建缩略图。

  • 最后,我们将此图像定向到浏览器。您还可以使用方法 thumb.write("mythumbnail.jpg") 将此图像本地存储在您的机器上。

转换图像格式

将图像文件从一种格式转换为另一种格式非常容易。RMagick 可以非常巧妙地处理它。您可以直接读取文件,然后使用不同的扩展名将其写出。

示例

以下示例将 JPEG 文件转换为 GIF 文件 −

require 'rubygems'
require 'RMagick'

class ImageController < ApplicationController

   def changeFormat

      img =  Magick::Image.read('tmp.jpg').first
    
      # 如果你想保存此图像,请使用以下命令
      # img.write("mythumbnail.gif")

      # 否则,按如下方式将其发送到浏览器
      send_data(img.to_blob, :disposition => 'inline', :type => 'image/gif')
   end
end

您可以根据需要将图像更改为以下格式 −

img = Magick::Image.read("tmp.png").first
img.write("tmp.jpg") # 转换为 JPEG
img.write("tmp.gif") # 转换为 GIF
img.write("JPG:tmp") # 转换为 JPEG
img.write("GIF:tmp") # 转换为 GIF