15

画像にロシア語のテキストを追加したいと思います。Windows マシンで PIL 1.1.7 と Python 2.7 を使用しています。PIL はlibfreetype library なしでコンパイルされているため、開発サーバーで次を使用します。

font_text = ImageFont.load('helvR24.pil')
draw.text((0, 0), 'Текст на русском', font=font_text)

( http://effbot.org/media/downloads/pilfonts.ziphelvR24.pilから取得)

本番環境では、次のことを行います。

font_text = ImageFont.truetype('HelveticaRegular.ttf', 24, encoding="utf-8")
draw.text((0, 0), 'Текст на русском', font=font_text)

unic(のcp-1251代わりにを使用しようとしましたutf-8)

どちらの場合も、ロシア語の文字は表示されません (代わりに「四角」またはダミー文字が表示されます)。おそらくhelvR24.pilロシア語の文字が含まれていないため(確認方法がわからない)、開発環境では機能しないと思います。でもHelveticaRegular.ttf確かにあります。.pyまた、ファイルのエンコーディングが геа-8であることも確認しました。また、デフォルトのフォントでもロシア語の文字は表示されません。

draw.text((0, 0), 'Текст на русском', font=ImageFont.load_default())

他に何を試して確認する必要がありますか? https://stackoverflow.com/a/18729512/604388を調べましたが、役に立ちません。

4

2 に答える 2

16

同様の問題があり、解決しました。

注意が必要なことがいくつかあります。

  1. _____future_____ から unicode_literarls をインポートするか、文字列の前に u を追加して、文字列が Unicode として解釈されるようにします。
  2. Unicode のフォントを使用していることを確認してください。ここにいくつかの無料のフォントがあります:オープンソースの Unicode 書体私はこれをお勧めします: dejavu

コードは次のとおりです。

#!/usr/bin/python
# -*- coding: utf-8 -*-
from PIL import Image, ImageDraw, ImageFont, ImageFilter

#configuration
font_size=36
width=500
height=100
back_ground_color=(255,255,255)
font_size=36
font_color=(0,0,0)
unicode_text = u"\u2605" + u"\u2606" + u"Текст на русском"

im  =  Image.new ( "RGB", (width,height), back_ground_color )
draw  =  ImageDraw.Draw ( im )
unicode_font = ImageFont.truetype("DejaVuSans.ttf", font_size)
draw.text ( (10,10), unicode_text, font=unicode_font, fill=font_color )

im.save("text.jpg")

ここに結果があります

ここに画像の説明を入力

于 2014-03-24T14:30:01.340 に答える