2011-11-28 101 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的語言翻譯。