ここで私のものと同様の質問があります:pythonPILは画像に複数行のテキストを描画します
ただし、ソリューションは以下を使用します。
textwrap.wrap(..., width=40)
これは文字の幅です。幅がピクセル単位である必要があり、すべてのドキュメントの幅が文字単位であるように見える場所で何かをしようとしています。(特定の幅の画像で文字幅が一定にならないように、さまざまなサイズのテキストを使用します)
ここで私のものと同様の質問があります:pythonPILは画像に複数行のテキストを描画します
ただし、ソリューションは以下を使用します。
textwrap.wrap(..., width=40)
これは文字の幅です。幅がピクセル単位である必要があり、すべてのドキュメントの幅が文字単位であるように見える場所で何かをしようとしています。(特定の幅の画像で文字幅が一定にならないように、さまざまなサイズのテキストを使用します)
私の簡単な解決策:
def wrap_text(text, width, font):
text_lines = []
text_line = []
text = text.replace('\n', ' [br] ')
words = text.split()
font_size = font.getsize(text)
for word in words:
if word == '[br]':
text_lines.append(' '.join(text_line))
text_line = []
continue
text_line.append(word)
w, h = font.getsize(' '.join(text_line))
if w > width:
text_line.pop()
text_lines.append(' '.join(text_line))
text_line = [word]
if len(text_line) > 0:
text_lines.append(' '.join(text_line))
return text_lines
あなたの言うようなことを見つけようとしますが、何も見つからないので、独自の方法を作成します。font.getsize(TEXT) は TEXT の幅と高さをピクセル単位で返すため、このメソッドは文字列を単語で分割し、単語が画像の幅よりも大きいかどうかを確認します。そうでない場合は、単語を変数に連結します. この変数が画像の幅より大きい場合は、リストに追加して変数をクリアするので、次の行を確認します。