如何使用ImageMagick将镜像文本绘制到图像上?

时间:2011-11-28 19:40:07

标签: ruby imagemagick minimagick

我正在使用ImageMagick(通过MiniMagick Ruby Gem)裁剪图像,我还在其顶部添加了一个注释,但我希望它被镜像。

我知道ImageMagick有一个“翻转”命令可以反映一个图像,但我不知道如何生成文本,翻转它并将其组合到我的图像上。

以下是我当前绘制文本的方式(非镜像)。此代码使用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

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

2 个答案:

答案 0 :(得分:1)

首先,对于你的Minimagick代码,你应该自己做'直接翻译到实际的ImageMagick命令',如果你真的有兴趣获得最大可能输入。不是每个人都想先学习Minimagick,然后才能提出他的建议。

第二次,您没有告诉您希望文本镜像的方式:左右?上下翻转?组合

第三次,尝试替换这两行

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

通过这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行

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

答案 1 :(得分:1)

现在,Nathan承认他只对-flip-flop“熟悉”图像,让我们告诉他如何使用它来翻转和翻转文本注释到未更改的图像上。

请参阅以下两个示例:

Normal text Mirrored text

左边有正常文本,右边是镜像文本(左右镜像 - 如果他想要这个问题,Nathan没有回答问题,或者他是否想要进行上下镜像)。

它是如何完成的?

使用以下命令完成 左图像的注释

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)。这条路...
    • ...主图像恢复正常,
    • ...现在镜像了注释文本。
  4. 这会导致 左图像的注释命令

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

    简单,嗯?

    (请注意我们如何将重力从西向东改变,以便文本出现在同一地点......)

    现在,Nathan自己的工作就是将这个算法翻译成Minimagick的语言。