2

私はrmagickを使用して、プログラムで画像にテキストで注釈を付けています。テキストは、中国語、韓国語、英語など、さまざまな言語をサポートする必要があります。私が扱っているフォント要件は非常に具体的であり、英語用に選択されたフォントはさまざまな西洋言語をサポートしていますが、中国語や韓国語はサポートしていません。それらの言語用の他のフォントを用意します。

私が念頭に置いているアプローチは、文字範囲を特定のフォントにマッピングし、それに基づいて使用するフォントをプログラムでrmagickに指示することです。私は明らかな何かを見逃していますか、それともこれは取るべき良いアプローチですか?

4

1 に答える 1

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

このメソッドはテキストを受け取り、適切なフォント面へのパスを返します。ここでは、正規表現の文字プロパティのマッチングが役立ちます。次に、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

この単純なアプローチでは、混合言語での入力を処理できないことに注意してください。

于 2013-01-14T22:33:27.417 に答える