35

Python を使用して、PIL を使用してさまざまな角度でテキストを描画できるようにしたいと考えています。

たとえば、時計の文字盤の周りに数字を描いているとします。数字の3は期待どおりに表示されますが、12は反時計回りに 90 度回転して描画されます。

したがって、さまざまな角度からさまざまな文字列を描くことができる必要があります。

4

7 に答える 7

49

一時的な空白の画像にテキストを描画し、それを回転させてから、元の画像に貼り付けます。ステップを関数にまとめることができます。使用する正確な座標を見つけ出すのに幸運を祈ります。冷や汗をかいた私の頭脳は、今のところそれができていません。

このデモでは、画像の上に斜めに黄色のテキストを書き込みます。

# Demo to add rotated text to an image using PIL

import Image
import ImageFont, ImageDraw, ImageOps

im=Image.open("stormy100.jpg")

f = ImageFont.load_default()
txt=Image.new('L', (500,50))
d = ImageDraw.Draw(txt)
d.text( (0, 0), "Someplace Near Boulder",  font=f, fill=255)
w=txt.rotate(17.5,  expand=1)

im.paste( ImageOps.colorize(w, (0,0,0), (255,255,84)), (242,60),  w)
于 2008-10-29T05:31:25.397 に答える
9

Image オブジェクトを作成する前に、テキストのサイズ (ピクセル単位) を知っておくと便利です。グラフを描画するときにそのようなコードを使用しました。次に、データラベルの配置などの問題はありませんでした(画像はテキストとまったく同じ大きさです)。

(...)
img_main = Image.new("RGB", (200, 200))
font = ImageFont.load_default()

# Text to be rotated...
rotate_text = u'This text should be rotated.'

# Image for text to be rotated
img_txt = Image.new('L', font.getsize(rotate_text))
draw_txt = ImageDraw.Draw(img_txt)
draw_txt.text((0,0), rotate_text, font=font, fill=255)
t = img_value_axis.rotate(90, expand=1)

2 つの画像を結合する残りの部分は、このページで既に説明されています。「不規則な」角度で回転する場合、このコードを少し改善する必要があります。実際には 90、180、270 で機能します...

于 2009-04-12T10:48:23.223 に答える
3

これが簡単だと言っているわけではありませんし、このソリューションがあなたにとって完璧であると言っているわけでもありませんが、こちらのドキュメントを見てください:

http://effbot.org/imagingbook/pil-index.htm

特に、Image、ImageDraw、および ImageFont モジュールに注意してください。

ここにあなたを助けるための例があります:


import Image
im = Image.new("RGB", (100, 100))
import ImageDraw
draw = ImageDraw.Draw(im)
draw.text((50, 50), "hey")
im.rotate(45).show()

あなたが本当にやりたいことをするためには、正しく回転されたテキスト画像を別々にたくさん作ってから、それらをもっと派手な操作で一緒に構成する必要があるかもしれません. そして結局のところ、それはまだ見栄えがよくないかもしれません. アンチエイリアシングなどの処理がどうなっているのかはわかりませんが、よくないかもしれません。頑張ってください。誰かがもっと簡単な方法を持っているなら、私も知りたいです。

于 2008-10-29T04:55:33.097 に答える