2012-07-10 20 views
8

Mam problemy z rysowaniem tekstu wielojęzycznego przy użyciu PIL. Powiedzmy, że chcę narysować tekst - "ひ ら が な - Hiragana, 히라가나". Ale funkcja ImageDraw.text() PILa pobiera tylko jedną czcionkę na raz, więc nie mogę poprawnie narysować tego tekstu, ponieważ wymaga on łącznie angielskich, japońskich i koreańskich czcionek.Rysowanie tekstu wielojęzycznego przy użyciu PIL

Do tej pory nie miałem szczęścia do znalezienia prostego rozwiązania, takiego jak przekazywanie wielu czcionek do pliku PIL, aby mógł wybrać odpowiednią czcionkę dla każdego znaku Unicode (jak ma to miejsce w przypadku nowoczesnych SDK lub przeglądarek internetowych).

Myślę, że powinienem powtórzyć każdą postać i określić, którą czcionkę użyć dla każdej postaci. Ale nie mogę przestać myśleć, że musi być łatwiejszy sposób na zrobienie tego.

Czy zmierzam w dobrym kierunku? Czy nie ma łatwiejszego sposobu?

PS) Można używać innego języka lub innej biblioteki obrazowania, jeśli istnieje o wiele lepsze rozwiązanie.

Odpowiedz

9

Wystarczy wybrać czcionkę Unicode. Przykład:

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

Tak, po prostu zorientowali się, że są czcionki, która może obejmować wiele unicode glifów. Ale naprawdę chciałem zastosować różne czcionki dla różnych języków. (Najlepsza wybrana czcionka dla każdego języka) Na razie używam [ttfquery] (http://ttfquery.sourceforge.net/), aby sprawdzić, czy każdy gatunek Unicode jest zawarty w pewnej czcionce, czy też nie. Dzięki za odpowiedź. – redism

+0

Prawdopodobnie możesz przyspieszyć rzeczy - jeśli masz dużo tekstu do narysowania - wyodrębniając rodziny języków ze swoich ciągów i sprawdzając jeden znak dla każdej rodziny języków. – dda

+0

Dziękuję za wskazanie tego, czego nie wiedziałem. :) – redism

Powiązane problemy