作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Pillow 为一些乌尔都语文本生成图像。使用相同的代码生成普通英语就像一个魅力,但当我对乌尔都语文本做同样的事情时,事情就不会那么顺利了。
以下是使用英语完成的代码和结果:
from PIL import Image, ImageFont, ImageDraw
from matplotlib import pyplot as plt
import numpy as np
from bidi.algorithm import get_display
text_string = u'Hello how are you doing?'
img = Image.new('RGB', (720, 480))
draw = ImageDraw.Draw(img)
draw.text((25,40), text_string, fill='white')
img.save('pil_text_font.png')
from PIL import Image, ImageFont, ImageDraw
from matplotlib import pyplot as plt
import numpy as np
from bidi.algorithm import get_display
text_string = u'نیدرلینڈز کی ملکہ پاکستان آ رہی ہیں'
img = Image.new('RGB', (720, 480))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('../UrduFontsDirectory' + data.iloc[14]['Path'], 25)
draw.text((25,40), text_string, fill='white', font=font)
img.save('pil_text_font.png')
from PIL import Image, ImageFont, ImageDraw
from matplotlib import pyplot as plt
import numpy as np
from bidi.algorithm import get_display
from arabic_reshaper import reshape
text_string = u'نیدرلینڈز کی ملکہ پاکستان آ رہی ہیں'
text_string = get_display(reshape(text_string))
img = Image.new('RGB', (720, 480))
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('../UrduFontsDirectory' + data.iloc[14]['Path'], 25)
draw.text((25,40), text_string, fill='white', font=font)
img.save('pil_text_font.png')
最佳答案
进一步的研发发现,这仍然是一个专门针对乌尔都语的问题,目前还没有解决方案:
As per described here.
但是,我能够使用旧的 .NET 找到解决此问题的方法。对于可能面临类似问题的人,可以使用以下方法生成乌尔都语文本图像(支持所有字体):
//Create the font using your font file
var modernFont = new PrivateFontCollection();
modernFont.AddFontFile("NafeesNaskh.ttf");//Load font from the font file
var font= new Font(modernFont.Families[0], 12);//The second argument is the font size
//first, create a dummy bitmap just to get a graphics object
Image img = new Bitmap(1, 1);
Graphics drawing = Graphics.FromImage(img);
//free up the dummy image and old graphics object
img.Dispose();
drawing.Dispose();
//create a new image of the right size
img = new Bitmap(500, 40);
drawing = Graphics.FromImage(img);
//paint the background
drawing.Clear(Color.Black);
//create a brush for the text
Brush textBrush = new SolidBrush(Color.White);
drawing.DrawString("نیدرلینڈز کی ملکہ پاکستان آ رہی ہیں", font, textBrush, new Rectangle(0, 0, img.Width, img.Height), new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
drawing.Save();
textBrush.Dispose();
drawing.Dispose();
string path = "./" + Id[i] + "_" + font.Name + ".jpg";
img.Save(path);
Image img = new Bitmap(1, 1);
Graphics drawing = Graphics.FromImage(img);
//Size of image for current text, font and font size
SizeF textSize = drawing.MeasureString("نیدرلینڈز کی ملکہ پاکستان آ رہی ہیں", font);
img.Dispose();
drawing.Dispose();
drawing.DrawString("نیدرلینڈز کی ملکہ پاکستان آ رہی ہیں", font, textBrush, new Rectangle(0, 0, img.Width, img.Height), new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center });
关于python - Pillow 无法为不同字体呈现乌尔都语文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888419/
我是一名优秀的程序员,十分优秀!