2012-11-20 64 views
2

我使用rmagick以編程方式用文本註釋圖像。文本需要支持一系列語言,包括中文,韓文,英文等。我正在處理的字體要求非常具體,爲英語選擇的字體支持各種西方語言,但不支持中文或韓文。我將爲這些語言提供其他字體。使用rmagick的多語言文本

我想到的方法是將字符範圍映射到特定的字體,並以此爲基礎編程告訴rmagick使用哪種字體。我錯過了什麼明顯的,或者這是一個很好的方法?

回答

3

這裏是我結束瞭解決這個:

def font_for(verb) 
    return "#{Rails.root}/app/uploaders/fonts/Gotham-Bold.ttf" if verb =~ /\p{Latin}/ 
    return "#{Rails.root}/app/uploaders/fonts/ArialUnicode.ttf" 
end 

這種方法需要一定的文字和路徑返回到合適的字體。正則表達式的character property matching派上用場!然後,我可以使用我的rmagick腳本中的font_for方法來註釋圖像。

def create_image_with_text 
    canvas = Magick::ImageList.new 
    canvas.new_image(640, 480) {self.background_color = "white"} 
    text = Magick::Draw.new 
    text.font = font_for "english" 
    text.pointsize = 23 
    text.gravity = ::Magick::NorthGravity 
    text.annotate(canvas, 0,0,0,28, "ENGLISH") { self.fill = '#343434' } 
    text.font = font_for self.verb 
    text.pointsize = 65 
    text.gravity = ::Magick::CenterGravity 
    text.annotate(canvas, 0,0,0,18, self.verb.upcase) { self.fill = '#343434' } 
    tempfile = Tempfile.new(['new_center_stripe', '.jpg']) 
    canvas.write tempfile.path 
    self.image.store!(tempfile) 
    end 

值得注意的是,這種簡單的方法就不會使用混合語言處理輸入。