2012-07-10 40 views
8

Tôi gặp sự cố khi vẽ văn bản đa ngôn ngữ bằng PIL. Giả sử tôi muốn vẽ văn bản - "ひ ら が な - Hiragana, 히라가나". Nhưng chức năng ImageDraw.text() của PIL chỉ mất một phông chữ một lúc, vì vậy tôi không thể vẽ văn bản này một cách chính xác, vì nó yêu cầu tất cả các phông chữ tiếng Anh, tiếng Nhật và tiếng Hàn. Cho đến nay, tôi không có may mắn tìm một giải pháp đơn giản như chuyển nhiều phông chữ sang PIL, để nó có thể chọn phông chữ phù hợp cho mỗi ký tự Unicode (Giống như SDK hiện đại hoặc trình duyệt web).Vẽ văn bản đa ngôn ngữ bằng PIL

Điều tôi đang nghĩ là, tôi nên lặp lại từng ký tự và xác định phông chữ nào sẽ được sử dụng cho từng ký tự một mình. Nhưng tôi không thể không nghĩ rằng phải có một cách dễ dàng hơn để làm điều này.

Tôi có đi đúng hướng không? Không phải là một cách dễ dàng hơn?

PS) Bạn có thể sử dụng ngôn ngữ khác hoặc thư viện hình ảnh khác nếu có giải pháp tốt hơn nhiều.

Trả lời

9

Bạn chỉ cần chọn phông chữ Unicode. Ví dụ:

import Image 
import ImageFont, ImageDraw 
image=Image.new("RGB",[320,320]) 
draw = ImageDraw.Draw(image) 
a=u"ひらがな - Hiragana, 히라가나" 
font=ImageFont.truetype("/Library/Fonts/Arial Unicode.ttf",14) 
draw.text((50, 50), a, font=font) 
image.save("a.png") 

Outputs this

+1

Vâng, tôi chỉ tìm ra rằng có những phông chữ đó có thể bao gồm nhiều glyphs unicode. Nhưng điều tôi thực sự muốn làm là áp dụng các phông chữ khác nhau cho các ngôn ngữ khác nhau. (Phông chữ được chọn tốt nhất cho từng ngôn ngữ) Hiện tại, tôi đang sử dụng [ttfquery] (http://ttfquery.sourceforge.net/) để kiểm tra xem mỗi glyph của unicode có được chứa trong một phông chữ nhất định hay không. Cảm ơn câu trả lời của bạn. – redism

+0

Bạn có thể tăng tốc mọi thứ - nếu bạn có nhiều văn bản để vẽ - bằng cách trích xuất các họ ngôn ngữ từ chuỗi của bạn và truy vấn một ký tự cho mỗi họ ngôn ngữ. – dda

+0

Cảm ơn bạn đã chỉ ra những gì tôi không biết. :) – redism

Các vấn đề liên quan