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 文件。
我希望使用 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 文件。