带有mini_magick(rails)的c.draw“text”中的特殊字符

时间:2012-08-11 11:11:39

标签: ruby-on-rails ruby-on-rails-3 imagemagick minimagick

我在使用mini_magick在图像上绘制包含引号,双引号等的文本时遇到了一些麻烦。我在c.draw上尝试了各种修改但无济于事。什么是转义这些字符的最佳方法,以便c.draw显示它们而不会出错?

错误:non-conforming drawing primitive definition m'`

制作

 c.draw "text 8,8 'I'm'" 

包括其他特殊字符(如é)也会导致错误。我希望能够接受来自用户的文本字符串作为输入,因此需要Unicode兼容性。

2 个答案:

答案 0 :(得分:1)

你看到了......

在任何情况下,以下命令行都适用于我:

convert \
   -size 500x100 xc:none \
   -box yellow \
   -pointsize 72 \
   -gravity center \
   -draw "text 8,8 '  \'I\'m\'  '" \
   -trim \
   +repage \
    special-chars.png

并产生这个:
Example PNG showing special characters created with ImageMagicks text drawing function

对于更复杂的文本绘图要求,强烈建议您通过将绘图命令写入单独的*.mvgMagick Vector Graphic)文件来规避所有转义。例如,此内容位于1.mvg

 text 8,8 "öäü ß ÄÖÜ é"

和这个命令:

convert \
   -size 250x100 xc:none \
   -box yellow \
   -pointsize 72 \
   -gravity center \
   -draw @1.mvg \
   -trim \
   +repage \
    special-chars.png
你会得到的 More special characters via an .mvg file

甚至,2.mvg

push graphic-context
 viewbox 0 0 600 100
 push graphic-context
   fill 'orange'
   rectangle 0,0 600,100
 pop graphic-context
 push graphic-context
   fill 'white'
   font Palatino-Roman
   font-size 48
   stroke-width 2
   gravity SouthEast
   text 8,8 "äöü ß ÄÖÜ é"
 pop graphic-context
 push graphic-context
   fill 'green'
   rectangle 10,10 300,90
 pop graphic-context
 push graphic-context
   fill 'red'
   font Palatino-Bold-Italic
   font-size 28
   stroke-width 1
   text 18,40 "€ ¥ © ℉ ậ ḁ å ǎ à ç ë ĵ"
 pop graphic-context
pop graphic-context
和这个命令:

convert 2.mvg 2.png
你可以得到:
...and even more special characters

答案 1 :(得分:0)

#Try lightweight GD2: https://www.ruby-toolbox.com/search?q=GD2


require 'gd2-ffij'
PATH_TO_FONT   = "/usr/share/fonts/truetype/DroidSans.ttf"
    image = GD2::Image::TrueColor.new(512, 512)
    image.draw do |pen|
      pen.font = GD2::Font::TrueType[PATH_TO_FONT, 32]
      pen.color = image.palette.resolve(GD2::Color[128, 16, 16])
      pen.move_to(256, 128)
      pen.text(GD2::VERSION, 5)
    end
image.export('./one.jpg')