Tôi muốn thêm văn bản tiếng Nga vào hình ảnh. Tôi sử dụng PIL 1.1.7 và Python 2.7 trên máy Windows. Kể từ PIL biên soạn without libfreetype library, tôi sử dụng sau trên máy chủ phát triển:Làm thế nào để sử dụng các ký tự unicode với PIL?
font_text = ImageFont.load('helvR24.pil')
draw.text((0, 0), 'Текст на русском', font=font_text)
(helvR24.pil
được lấy từ http://effbot.org/media/downloads/pilfonts.zip)
Về môi trường sản xuất tôi làm như sau:
font_text = ImageFont.truetype('HelveticaRegular.ttf', 24, encoding="utf-8")
draw.text((0, 0), 'Текст на русском', font=font_text)
(cố gắng sử dụng unic
, cp-1251
thay vì utf-8
)
Trong cả hai trường hợp, nó không hiển thị ký tự tiếng Nga ('hình vuông' hoặc các ký tự giả được hiển thị thay thế). Tôi nghĩ rằng nó không hoạt động trên môi trường phát triển vì hầu hết có lẽ helvR24.pil
không chứa các ký tự tiếng Nga (không biết cách kiểm tra nó). Nhưng HelveticaRegular.ttf
chắc chắn có nó. Tôi cũng đã kiểm tra rằng tệp .py
của tôi có mã hóa геа-8. Và nó không hiển thị các ký tự tiếng Nga ngay cả với phông chữ mặc định:
draw.text((0, 0), 'Текст на русском', font=ImageFont.load_default())
Tôi nên thử/xác minh những gì khác? Tôi đã xem xét thông qua https://stackoverflow.com/a/18729512/604388 - nó không giúp đỡ.
cố gắng để vượt qua các văn bản như chuỗi unicode: 'draw.text ((0, 0), u'Текст на русском ', font = ImageFont.load_default()) ' – mata
@mata, chắc chắn tôi đã thử nó rồi (cũng như' unicode (' Текст на русском ',' utf-8 ') '). Nó trả về 'UnicodeEncodeError: 'ascii' codec không thể mã hóa các ký tự ở vị trí 0-5: thứ tự không nằm trong phạm vi (128)' tham chiếu đến 'PIL \ ImageDraw.py", dòng 267, text mask = font.getmask (văn bản, self.fontmode) ' –