在我的应用程序中,有一个控制器,它有一个从TrueType和OpenType文件生成图像的方法,它接收“颜色”,“任意文本”,“背景”等参数。
问题是当路径文件包含空格时:
def imagefont
font = Font.find params[:font]
file = File.basename font.file, File.extname(font.file)
fontfile = File.path(Pathname.new("public/downloads/#{font.name.slice(0,1).capitalize}/#{file}/#{font.file}"))
options = {
:max_width => 240,
:text_color => params[:color],
:font_size => 35,
:text => params[:text],
:bg_color => params[:background],
:font => fontfile
}
if File.exists?(options[:font])
canvas = Magick::Image.new 50, 50
image = Magick::Draw.new
begin
image.annotate(canvas, 0, 0, 0, 0, options[:text]) do
image.pointsize = options[:font_size]
image.font = options[:font]
end
metrics = image.get_type_metrics canvas, options[:text]
canvas = Magick::Image.new(metrics.width, metrics.height){ self.background_color = options[:bg_color] }
options[:font_size] -= 1
end while metrics.width > options[:max_width]
image = Magick::Draw.new
image.font options[:font]
image.font_size options[:font_size]
image.fill options[:text_color]
image.text 0, 0, options[:text]
image.gravity = Magick::CenterGravity
image.draw canvas
temp = Tempfile.new([font.file, '.png'])
canvas.write(temp.path)
render :text => open(temp.path).read
end
end
上述代码有效,除非字体名称包含空格。在这种情况下,它会显示以下错误:
Magick::ImageMagickError in FontController#imagefont
non-conforming drawing primitive definition `Blick' @ error/draw.c/DrawImage/3146
在这种情况下,字体名称为“A Blick for All Seasons
”,因此我认为这是引号的问题。我尝试过简单的引号,但我没有成功。
答案 0 :(得分:1)
我没有答案,但我得到了一个可能的解决方案。我找到并修改了接收 fontfile 参数的gem文件中的方法。最初出现如此:
# File lib/RMagick.rb, line 335
def font(name)
primitive "font #{name}"
end
我已经改变了添加简单的引号,我得到了它,工作正常:
# File lib/RMagick.rb, line 335
def font(name)
primitive "font \'#{name}\'"
end
我想我应该通过此更改发送“拉取请求”。除非有另一个答案。