【问题标题】:How can I draw mirrored text onto an image using ImageMagick?如何使用 ImageMagick 在图像上绘制镜像文本?
【发布时间】:2011-11-28 19:40:07
【问题描述】:

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

我知道 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

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

【问题讨论】:

    标签: ruby imagemagick minimagick


    【解决方案1】:

    首先,如果您真的有兴趣获得最大的可能输入。不是每个人都想先学习 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
    

    【讨论】:

    • 我熟悉翻转和翻转,但我正在尝试将它们应用于文本,独立于图像。
    • 对不起,我不是这个意思。
    【解决方案2】:

    既然 Nathan 承认他“熟悉”-flip 和 -flop 仅用于图像,让我们向他展示如何使用它在未更改的图像上获得翻转和翻转文本注释。

    看这两个例子:

    左边是普通文本,右边是镜像文本(左右镜像 - 如果他想要这个,或者如果他想要上下镜像,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)。这边走...
      • ...主图恢复正常,
      • ...注释文本现已镜像。

    这导致左图的注释命令:

    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 的语言是 Nathan 自己的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2016-11-04
      • 2017-07-07
      • 2017-03-10
      • 2012-07-21
      相关资源
      最近更新 更多