2011-11-28 76 views
2

我正在使用ImageMagick(通过MiniMagick Ruby Gem)来裁剪图像,我也在它的顶部添加了一个注释,但我希望它被镜像。如何使用ImageMagick将镜像文本绘制到图像上?

我知道ImageMagick有一个镜像映像的'flop'命令,但我不确定如何生成文本,然后将其翻转并将其组合到我的图像上。

这是我目前如何绘制文本(非镜像)。此代码使用MiniMagick,但它直接转换为实际的ImageMagick命令。

image.combine_options do |c| 
    c.resize "1000" 
    c.font Rails.root.join('app/assets/fonts/Menlo.ttc').to_s 
    c.fill '#888888' 
    c.pointsize '16' 
    c.draw "text 0,0 '#{annotation}'" 
end 

我该如何修改或替换它以绘制镜像文本?

回答

1

首先,你应该为你的Minimagick代码,自己做“漂亮的直接转化到实际ImageMagick的命令”,如果你真的有兴趣获得最大可能的输入。并非每个人都想在第一时间学习Minimagick,然后才可以听取他的建议。

第二个,你没有告诉你想要你的文本镜像的方式:左 - 右?上下翻转?合并?

第三,尝试通过这些3行

c.pointsize '16' 
c.draw "text 0,0 '#{annotation}'" 
c.flop 

或由这些3行

c.pointsize '16' 
c.draw "text 0,0 '#{annotation}'" 
c.flip 

或由这些4行

替换这些2行

c.pointsize '16' 
c.draw "text 0,0 '#{annotation}'" 

c.pointsize '16' 
c.draw "text 0,0 '#{annotation}'" 
c.flip 
c.flop 
+0

我对翻转和翻牌很熟悉,但我试图将它们应用于文本,而与图像无关。 –

+1

老兄!听着,不要争辩。好的,我会多解释一下...... –

+0

对不起,我不是说这是一个争论。 –

1

现在内森承认,他“熟悉”与-flip-flop为仅适用于图像,让我们告诉他如何可以用它来获得仍然翻转并开始跳动文本注释上不变的图像。

看到这两个例子:

Normal text   Mirrored text

左与普通的文本,右接镜像文本(左,右镜像 - 如果他想这样弥敦道没有回答这个问题,或者他是否想要自上而下的镜像)。

它是如何完成的?

左图像的注解是用下面的命令来完成:

convert     \ 
    logo:     \ 
    -fill white    \ 
    -undercolor '#00000080' \ 
    \(         \ 
     -gravity west      \ 
     -pointsize 32      \ 
     -annotate +0+40     \ 
     " Dude! Listen, don't argue... " \ 
    \)         \ 
    -scale 310x    \ 
    normal.png 

所以这个结果对下一步操作的依据。在下一步中,我们将修改此命令以创建一个镜像文本注释。但是,因为我们不能直接写入镜像文本,我们使用了花样繁多的一起来我们的衣袖:

  1. 镜像图像第一(第一-flop)。
  2. 在镜像图像上写入正常文本。
  3. 再次镜像结果图像(第二个-flop)。这样...
    • ...主图像恢复正常,
    • ...注释文本现在被镜像。

这导致左图像的标注命令

convert     \ 
    logo:     \ 
    -flop     \ 
    -fill white    \ 
    -undercolor '#00000080' \ 
    \(         \ 
     -gravity east      \ 
     -pointsize 32      \ 
     -annotate +0+40     \ 
     " Dude! Listen, don't argue... " \ 
    \)         \ 
    -flop     \ 
    -scale 310x    \ 
    mirrored.png 

容易,是吗?

(只注意我们怎么也不得不把重心从西改到东,这样的文字出现在同一个地方......)

这是内森自己的工作,现在这个算法到Minimagick的语言翻译。