2

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

これを変更または置き換えて、ミラーリングされたテキストを描画するにはどうすればよいですか?

4

2 に答える 2

1

最初に、可能な限り最大の入力を取得することに本当に関心がある場合は、Minimagick コードについて、「実際の ImageMagick コマンドにかなり直接的に変換する」ことを自分で行う必要があります。ここにいる全員が、最初に Minimagick を学びたいと思っているわけではありません。

次に、テキストをどの方向にミラーリングするかを指定していませんでした: 左右? 逆さまに?組み合わせ?

第三に、これらの2行を置き換えてみてください

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
于 2012-08-13T19:17:53.620 に答える
1

ネイサンは画像だけに「慣れている」ことを認めたので-flip-flopそれを使用して、変更されていない画像にテキスト注釈を反転および反転させる方法を彼に示しましょう。

次の 2 つの例を参照してください。

通常のテキスト ミラーリングされたテキスト

左は通常のテキスト、右はミラーリングされたテキスト (左右ミラーリング - ネイサンは、これが必要なのか、それとも上下のミラーリングが必要なのかという質問に答えませんでした)。

それはどのように行われましたか?

左の画像の注釈は、次のコマンドで行われました。

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

したがって、この結果は次のステップの基礎となります。次のステップでは、このコマンドを変更してミラー化されたテキスト注釈を作成します。しかし、ミラーリングされたテキストを直接書くことはできないため、私たちは多くの裏技の 1 つを使用します。

  1. 最初にイメージをミラーリングします (最初に-flop)。
  2. ミラーリングされたイメージに通常のテキストを書き込みます。
  3. 結果のイメージをもう一度ミラーリングします (second -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 自身の仕事です。

于 2012-08-22T23:18:36.677 に答える