tutorial pil library python unicode python-imaging-library pillow hindi

pil - python image library



¿Cómo puedo imprimir oraciones en hindi(unicode) en una imagen en Python? (1)

Parece que hay un error abierto para representar el texto en hindi (fuente Devanagari).

github.com/python-pillow/Pillow/issues/3191

Puede probar con otra biblioteca como: pyvips (no encuentro la API muy intuitiva, pero puede funcionar para usted)

import pyvips # To install ''pyvips'' refers to https://pypi.org/project/pyvips/ # 1. Intall libvips shared library from https://jcupitt.github.io/libvips/install.html # 2. Set the PATH variable. # 3. run pip install pyvips def generate_tweet_image(): cnum = 1 output_file = "tweet_file.png" text = u'''' with open("hindi.txt", "r", encoding=''UTF-8'') as filestream: for l in filestream.readlines(): text = text + f''{cnum}) {l}'' cnum += 1 MAX_W, MAX_H = 1500, 1500 # See for API https://jcupitt.github.io/pyvips/vimage.html#pyvips.Image.text # font file: ARIALUNI.TTF image = pyvips.Image.text(text, width=MAX_W, height=MAX_H, font=''Arial Unicode MS'', dpi=96) image.write_to_file(output_file) print(f''File Written at : {output_file}'') generate_tweet_image()

Salida:

Espero que esto ayude.

Tengo un archivo llamado "hindi.txt". Tiene los contenidos de la siguiente manera. Estoy usando Python3.5.

कामकाजी महिलाओं के लिए देश में दिल्ली असुरक्षित, सिक्किम सबसे बेहतर: रिपोर्ट 9 साल से अटकी राफेल डील मंजूर, 59000 Cr में भारत खरीदेगा 36 फाइटर प्लेन WhatsApp को टक्कर देने आर्टिफिशियल इंटेलिजेंस के साथ आया गूगल का Allo मैसेंजर उड़ी हमले पर 10 खुलासे: आर्मी बेस में 150 मीटर अंदर तक घुस आए थे जैश के आतंकी उड़ी हमलाः भारत का कड़ा रुख देखकर PAK ने LoC से सटे शहरों में कैंसल PAK को आतंकी देश करार देने के लिए अमेरिकी संसद में पेश हुआ बिल

Estoy abriendo este archivo y luego leo línea por línea. Luego imprimiendo este texto en imagen. Mi fragmento de código se muestra a continuación.

from PIL import Image, ImageDraw, ImageFont, ImageOps import os with open("hindi.txt", "r") as filestream: cnum = 1 astr = filestream.read().splitlines() font5 = ImageFont.truetype(''/home/SunehraBharat/filestotweet/fonts/ARIALUNI.TTF'', 26) MAX_W, MAX_H = 1500, 1500 foreground_image = Image.new(''RGB'', (MAX_W, MAX_H), (0, 0, 0, 0)) draw = ImageDraw.Draw(foreground_image) image_name = str(cnum) + "_" + "image.png" current_h, pad = 40, 14 c = 1 for txtline in astr: line = str(c) + "). " + txtline #printing on console to check if lines are coming correctly. print(line) w, h = draw.textsize(line, font=font5) draw.text((10, current_h), line, font=font5, fill=(255,255,255,1)) current_h += h + pad c = c + 1 #saving image foreground_image.save(image_name) cnum = cnum + 1

Salida en la consola debido a la declaración de impresión (línea) - Correcto

कामकाजी महिलाओं के लिए देश में दिल्ली असुरक्षित, सिक्किम सबसे बेहतर: रिपोर्ट 9 साल से अटकी राफेल डील मंजूर, 59000 Cr में भारत खरीदेगा 36 फाइटर प्लेन WhatsApp को टक्कर देने आर्टिफिशियल इंटेलिजेंस के साथ आया गूगल का Allo मैसेंजर उड़ी हमले पर 10 खुलासे: आर्मी बेस में 150 मीटर अंदर तक घुस आए थे जैश के आतंकी उड़ी हमलाः भारत का कड़ा रुख देखकर PAK ने LoC से सटे शहरों में कैंसल PAK को आतंकी देश करार देने के लिए अमेरिकी संसद में पेश हुआ बिल

Ahora mi salida de imagen:

Como puede comparar ahora, la salida no es con respecto a la entrada. Algunas palabras son incorrectas "सिक्किम", "महिलाओं".

He intentado diferentes fuentes. Pero obteniendo el mismo resultado cada vez. Podrías ayudarme. Y dejame saber donde me falta.