Font dan unicode - PIL dengan python

Saya ingin menggunakan font dari LaTeX atau yang serupa. Mengapa Unicode tidak berfungsi di font ini? Apakah beberapa font sesuai untuk Unicode dan beberapa lainnya tidak? Font mana yang harus saya gunakan? Terimakasih banyak

from PIL import Image, ImageDraw, ImageFont, ImageFilter

font_size=36
width=500
height=100
back_ground_color=(255,255,255)
font_size=36
font_color=(0,0,0)
unicode_text = u"\u03B2 Hello"

im  =  Image.new ( "RGB", (width,height), back_ground_color )
draw  =  ImageDraw.Draw ( im )
unicode_font = ImageFont.truetype("DejaVuSans.ttf", 40)
font = ImageFont.truetype('lmroman7-regular.otf', 40)

draw.text ( (10,10), unicode_text, font=unicode_font, fill=font_color )
draw.text ( (20,40), unicode_text, font=font, fill=font_color )

im.save("text.jpg")

Saya memiliki file dengan font di direktori yang sama dengan kode python. Saya mencari font LM Roman untuk diunduh yang dapat menampilkan versi beta.


person Elena Greg    schedule 06.10.2020    source sumber
comment
Yang dimaksud dengan font dari LaTeX adalah yang LM Roman? Menurut ekstensi file (.otf), ini adalah font Open Type, bukan True Type (.ttf). Karena ImageFont memiliki metode truetype, tetapi tidak ada metode opentype, kemungkinan metode opentype tidak didukung oleh PIL.   -  person lenz    schedule 06.10.2020
comment
Ya, maksudku LM Roman. Saya mengunduh font ini fontsquirrel.com/fonts/latin-modern-roman , yang memiliki ekstensi .ttf. Hasilnya adalah persegi panjang, bukan beta   -  person Elena Greg    schedule 06.10.2020
comment
Jika Anda menjalankan skrip dalam jawaban ini, Anda dapat menemukan semua font Anda mampu menampilkan beta itu... stackoverflow.com/a/60057237 /2836621   -  person Mark Setchell    schedule 06.10.2020
comment
Terima kasih. Apa yang harus saya tulis ke terminal? Saya mencoba python3 font_find.py u03B2 dan python3 font_find.py \u03B2   -  person Elena Greg    schedule 06.10.2020
comment
Tidak, gunakan font_find β   -  person Mark Setchell    schedule 07.10.2020


Jawaban (2)


CMU-serif adalah font yang sesuai mirip dengan LM Roman dengan Tersedia huruf Yunani

person Elena Greg    schedule 06.10.2020

apa kesalahannya? Saya menjalankan kode Anda, itu memberi saya kesalahan OSError: can not open resource. jika demikian, maka Anda harus memberikan alamat font, bukan nama font. PIL dapat mendukung .oft font juga. tapi saya tidak yakin Unicode (\u03B2) ini akan memberi Anda bentuk persegi panjang. ini kode Anda (semoga membantu):

from PIL import Image, ImageDraw, ImageFont, ImageFilter
import os
# __file__ is the path for your code file
directory,filename = os.path.split(__file__)

font_size=36
width=500
height=100
back_ground_color=(255,255,255)
font_size=36
font_color=(0,0,0)
unicode_text = "\u03B2 Hello"

im  =  Image.new ( "RGB", (width,height), back_ground_color )
draw  =  ImageDraw.Draw ( im )
# if the font is installed in your computer use this code
unicode_font = ImageFont.truetype("C:\\Windows\\Fonts\\Arial.ttf", 40)
#if it's in the same folder as the code, use this code
font = ImageFont.truetype(directory + "\\lmroman10-regular.otf", 40)
draw.text ( (10,10), unicode_text, font=unicode_font, fill=font_color )
draw.text ( (20,40), unicode_text, font=font, fill=font_color )

im.save("text.jpg")
person Shoaib Mirzaei    schedule 06.10.2020
comment
Saya memiliki font di folder yang sama dengan kodenya. Saya benar-benar bingung dengan semua folder dengan font yang saya temukan di komputer saya. Namun demikian, saya tidak menemukan ekstensi .ttf atau LM Roman pada pandangan pertama; oleh karena itu saya mendownload yang lain dan memberikannya ke direktori dengan kode bersama. - person Elena Greg; 06.10.2020
comment
hai @ElenaGreg Saya baru saja memperbarui jawabannya. tapi aku masih bingung dengan situasimu. jika kode Anda tidak mengenali font maka Anda dapat menggunakan jawabannya. jika masalah Anda adalah tentang mencetak persegi panjang pada suatu gambar, maka saya kira Anda mencari font lain atau unicode lainnya. tapi kamu masih belum menjawab pertanyaanku, apa kesalahannya? - person Shoaib Mirzaei; 07.10.2020