2
我使用rmagick以編程方式用文本註釋圖像。文本需要支持一系列語言,包括中文,韓文,英文等。我正在處理的字體要求非常具體,爲英語選擇的字體支持各種西方語言,但不支持中文或韓文。我將爲這些語言提供其他字體。使用rmagick的多語言文本
我想到的方法是將字符範圍映射到特定的字體,並以此爲基礎編程告訴rmagick使用哪種字體。我錯過了什麼明顯的,或者這是一個很好的方法?
我使用rmagick以編程方式用文本註釋圖像。文本需要支持一系列語言,包括中文,韓文,英文等。我正在處理的字體要求非常具體,爲英語選擇的字體支持各種西方語言,但不支持中文或韓文。我將爲這些語言提供其他字體。使用rmagick的多語言文本
我想到的方法是將字符範圍映射到特定的字體,並以此爲基礎編程告訴rmagick使用哪種字體。我錯過了什麼明顯的,或者這是一個很好的方法?
這裏是我結束瞭解決這個:
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
值得注意的是,這種簡單的方法就不會使用混合語言處理輸入。