2

私はフレームごとに分割して画像として保存しているというgifを持っています。私はImageDrawを使ってテキストを書きましたが、今は問題に遭っています。テキストは国境の外に出ています。キャッチは、スクリプトを使ってインターネットからランダムなgifを取得しているので、フォントのサイズや書き込む量のテキストをハードコードできないということです。画像に追加するテキストが画像の枠内に収まるようにするにはどうすればよいですか?何が起こっているのイメージにテキストを書き込んで、境界線の外に出ないようにするにはどうすればよいですか?

例:

Screenshot

画像に書き込みを扱うコードのセクション:

meme_text = "When your kitten is thinking about tuna but has none" 
for i in range(0,max_frame_int + 1): 
    writeimg = Image.open("frameinstance" + str(i) + ".png") 
    newimg = Image.new("RGB", writeimg.size) 
    newimg.paste(writeimg) 
    width_image = newimg.size[0] 
    height_image = newimg.size[1] 
    draw = ImageDraw.Draw(newimg) 
    # font = ImageFont.truetype(<font-file>, <font-size>) 
    font = ImageFont.truetype("impact.ttf", 50) 
    # draw.text((x, y),"Sample Text",(r,g,b)) 
    draw.text((int(0.05*width_image), int(0.7*height_image)),meme_text,(255,255,255),font=font) 
    newimg.save("newimg" + str(i) +".png") 

答えて

0

あなたの問題は、あなたが占めていないですレンダリングされるテキストのサイズと画像の幅。次へfont = ImageFont...の行を変更した場合:

for font_size in range(50, 0, -1): 
    font = ImageFont.truetype("impact.ttf", font_size) 
    if font.getsize(meme_text)[0] <= width_image: 
     break 
else: 
    print 'no fonts fit!' 

スクリプトは、テキストのすべてに適合する最大のフォントサイズを見つけるでしょう。

+0

あなたが投稿したサンプル画像でこれを試してみました。スクリプトは、10ptsがテキスト全体に収まる最大のフォントであり、実際にそれを書いてそれに合っていることを発見しました。 – jknupp

+0

PILのコードはありますか? –

+0

私は 'pillow'を使用しました。だから、... – jknupp

関連する問題