Python:将 xml 文件转换为图像

Python: converting an xml file to an image

我希望使用 python 脚本将 xml 文件转换为图像(最好是 png 文件)。我没有从我的在线研究中找到太多。我正在尝试使用 PIL。从 Whosebug 上的 this post 我能够找到这段代码:

from PIL import Image
import ImageFont, ImageDraw

image = Image.new("RGBA", (288,432), (255,255,255))
usr_font = ImageFont.truetype("resources/HelveticaNeueLight.ttf", 25)
d_usr = ImageDraw.Draw(image)
d_usr = d_usr.text((105,280), "MYTEXT",(0,0,0), font=usr_font)

但是我不太明白这是怎么回事。我试图将 "MYTEXT" 替换为实际的 xml 文件内容,但没有成功。

我基本上是在寻找任何解决方案(最好使用 PIL,但它可以是 python 的另一个模块)。我接近使用 imgkit:

import imgkit

imgkit.from_file('example_IN.xml','example_OUT.png')

其中 returns 一个 png 文件。虽然图像的分辨率很糟糕,但它位于一个非常大的白色矩形内。我可能会遗漏一些东西。我知道您可以修改 imgkit 的选项,但我不知道要进行哪些修改,即使在查看了文档之后也是如此。任何帮助将不胜感激。

非常感谢! 最好的问候。

我试了一下 pyvips:

#!/usr/bin/env python3

import sys
import pyvips
from xml.sax.saxutils import escape

# load first arg as a string
txt = open(sys.argv[1], "r").read()

# pyvips allows pango markup in strings -- you can write stuff like
# text("hello <i>sailor!</i>")
# so we need to escape < > & in the text file
txt = escape(txt)

img = pyvips.Image.text(txt)

# save to second arg
img.write_to_file(sys.argv[2])

你可以运行这样:

./txt2img.py vari.ws x.png

要做到这一点:

速度非常快 -- 在这台普通的笔记本电脑上 运行 花费了 300 毫秒。

如果您想要更高的分辨率,text 方法有很多选项,可以更改对齐方式、在某个限制处换行、更改字体等。

https://libvips.github.io/libvips/API/current/libvips-create.html#vips-text

上面 jcuppit using pyvips 建议的解决方案绝对有效并且很快。我找到了另一种解决方案,可以使用 imgkit 使我之前的代码正常工作(速度较慢,我在这里仅供参考):输出图像的分辨率很差。如果发生这种情况,可以在选项中更改宽度和高度(这是我错过的一个简单修复):

import imgkit

options = {
    'width' : 600,
    'height' : 600
}

imgkit.from_file('example_IN.xml','example_OUT.png', options=options)

这也会将 xml 文件转换为 png 文件。