0

我正在寻找使用 python 脚本将 xml 文件转换为图像(最好是 png 文件)。我没有从我的在线研究中发现太多。我正在尝试使用 PIL。从StackOverflow 上的这篇文章中,我能够找到以下代码:

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)

但我不太明白发生了什么。我试图用实际的 xml 文件内容替换“MYTEXT”,但它不起作用。

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

import imgkit

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

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

非常感谢!最好的祝福。

4

2 回答 2

2

我尝试了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

于 2019-10-31T20:57:36.737 回答
1

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

import imgkit

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

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

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

于 2019-11-01T10:02:56.377 回答