使用RMagick和'caption'无法获得重力

时间:2009-12-09 03:49:54

标签: ruby imagemagick rmagick

我在Snow Leopard上使用RMagick 2.12.2和ImageMagick 6.5.6-10。我试图在一组照片上添加标题,我正在使标题生效(即它出现在图像上),但我无法让重力参数正常工作。

无论我将它设置为什么,我最终都会对NorthGravity有所不同。

例如:将它设置为SouthWestGravity会给我NorthWestGravity。将它设置为SouthEastGravity会给我NorthEastGravity。将它设置为CenterGravity给了我NorthFravity。

换句话说,我无法将标题从图像的顶部下来。

我考虑使用“注释”,但我需要“标题”,因此每个图像的冗长标题文本将会换行。

我做错了什么?

以下是代码:

#!/usr/bin/env ruby

require "rubygems"
require "yaml"
require "RMagick"
include Magick

base_dir = "/Users/mike/Desktop/caption_test"

photo_log = File.open("#{base_dir}/photo_log.yaml" )

YAML::load_documents(photo_log) do |doc|

  caption = doc["photo-caption"]
  filename = doc["file"]

  canvas = ImageList.new.from_blob(open("#{base_dir}/#{filename}") { |f| f.read } )

  canvas << Magick::Image.read("caption:#{caption}") { 
  self.gravity = SouthWestGravity
  self.size = "#{canvas.first.columns}"
  self.font = "Helvetica Neue"
  self.pointsize = 12
  self.background_color = "#fff"
 }.first

 canvas.flatten_images.write("#{base_dir}/images/#{filename}")

end

2 个答案:

答案 0 :(得分:1)

你可能已经很久了,但我找到了一个非常简单的答案 - 使用

canvas.append(true).write("#{base_dir}/images/#{filename}")

换句话说,您需要append选项(使用'true'垂直堆叠)。

答案 1 :(得分:0)

我认为你的问题是你将重力应用于字幕图像的尺寸而不是底层图像的尺寸。你的标题将东/西在它的宽度内对齐,但因为它使它自己的高度,北/南总是意味着北。

你可能想在flatten_images调用上指定引力,而不是看起来......