ruby - 使用 rmagick 进行多语言文本

标签 ruby utf-8 fonts 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

值得注意的是,这种简单的方法无法处理混合语言的输入。

关于ruby - 使用 rmagick 进行多语言文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480189/

相关文章:

字符串的 Ruby 未定义方法 `encode'

java - 在 BlackBerry java 上显示日文字符时出现问题

encoding - 检测错误的 UTF-8 编码 : list of bad characters to sniff?

c# - 如何处理 FormattedText/让 WPF 放弃 .TTF 文件?

ruby - 如何在 ruby​​ 中拆分和获取数据

javascript - Ruby:每次点击图片,如何播放不同的音频片段?

ruby-on-rails - Carrierwave 在控制台上给出错误

objective-c - NSString : easy way to remove UTF-8 accents from a string?

css - 如何设置全局字体 - CSS

android - 更改 AlertDialog 消息的字体大小