2012-05-28 17 views
1

내 응용 프로그램에는 "색상", "임의의 텍스트", "배경"과 같은 매개 변수를 수신하는 TrueType 및 OpenType 파일에서 이미지를 생성하는 방법이있는 컨트롤러가 있습니다. 글꼴 이름은 공백을 포함하지 않는Rmagick을 사용하여 글꼴 이미지를 생성하려면 어떻게해야합니까?

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 

위의 코드는 작동 : 경로 파일에 공백이 포함 된 경우

문제입니다. 글꼴 이름이 "A Blick for All Seasons"이 경우에

Magick::ImageMagickError in FontController#imagefont 
non-conforming drawing primitive definition `Blick' @ error/draw.c/DrawImage/3146 

, 그래서 그것을 따옴표에 문제가 있다고 생각 :이 경우 다음과 같은 오류를 표시합니다. 나는 간단한 따옴표를 넣으려고했지만 성공하지 못했습니다.

+0

글꼴 이름에 'Blick'이라는 단어의 양쪽에 별표가 포함되어 있습니까? – x1a4

+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 

가 나는 이러한 변화와 "풀 요청"을 보내한다고 생각합니다. 다른 대답이없는 한.

관련 문제