2017-11-05 14 views
0

私が持っているプロジェクトでは、テキストを使ってアウトラインを作成しようとしています。全体のアイデアは、元の白いテキストから少し透明な黒いテキストをオフセットすることです。PIL:イメージの上に透明なテキストを描画します

何らかの理由で、黒いテキストが表示されますが、ネットは透明です。ここでMCVEがある:

image = Image.open("spongebob.gif").convert("RGBA") 

draw = ImageDraw.Draw(image, "RGBA") 
font = ImageFont.truetype("impact.ttf", 25) 
draw.text((0, 0), "This text should be 5% alpha", fill=(0, 0, 0, 15), font=font) 
image.save("foo.gif") 

結果:

Sponge Bob not happy

私は何を逃したのですか?

答えて

1

これはうまくいくはずです。

from PIL import Image, ImageDraw, ImageFont 

image = Image.open("spongebob.gif").convert("RGBA") 
txt = Image.new('RGBA', image.size, (255,255,255,0)) 

font = ImageFont.truetype("impact.ttf", 25) 
d = ImageDraw.Draw(txt)  

d.text((0, 0), "This text should be 5% alpha", fill=(0, 0, 0, 15), font=font) 
combined = Image.alpha_composite(image, txt)  

combined.save("foo.gif") 

編集:これはどういうわけかある枕のドキュメントhttp://pillow.readthedocs.io/en/4.2.x/reference/ImageDraw.html#example-draw-partial-opacity-text

+0

から参考例では、私も自分の問題を解決しました。なぜこれがこのように機能しているのか分かりませんか?なぜイメージ上にテキストを直接描画しても効果がありませんか? – FunkySayu

+0

@FunkySayu私はそれがなぜそのように働くのか、決してそれに目を通さないという考えを持っていません。通常の画像エディタ(Paint.NETなど)では、レイヤーのように扱いました。そのレイヤー上に配置した要素の不透明度を調整し、最終的な製品を得るためにマージします。 matplotlibで 'alpha 'のように振る舞わないのはなぜ私の外にあるのですか? –

関連する問題