Python: преобразование XML-файла в изображение - PullRequest
0 голосов
/ 31 октября 2019

Я хочу преобразовать xml-файл в изображение (в идеале в png-файл), используя скрипт на python. Я не нашел много из моих онлайн-исследований. Я пытаюсь использовать 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)

Но я не совсем понимаю, что происходит. Я попытался заменить «MYTEXT» фактическим содержимым файла xml, и оно не сработало.

Я в основном ищу какое-либо решение (в идеале, используя PIL, но это может быть другой модуль для python). Я подошел близко, используя imgkit:

import imgkit

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

, который возвращает файл PNG. Разрешение изображения ужасно, и оно лежит в пределах очень большого белого прямоугольника. Я могу что-то упустить. Я знаю, что вы можете изменить параметры для imgkit, но я не знаю, какие изменения внести, даже после проверки документации. Буду очень признателен за любую помощь.

Большое вам спасибо! С наилучшими пожеланиями.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Решение, предложенное выше jcuppit с использованием pyvips , определенно работает и быстро. Я нашел другое решение, чтобы мой предыдущий код работал выше с использованием imgkit (он медленнее, я даю его здесь только для справки): разрешение выходного изображения было плохим. Если это произойдет, ширину и высоту можно изменить в настройках (это простое исправление, которое я пропустил):

import imgkit

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

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

И это также преобразует XML-файл в PNG-файл.

1 голос
/ 31 октября 2019

Я пошел в 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

Чтобы сделать это:

enter image description here

Это довольно быстро - для работы на этом скромном ноутбуке потребовалось 300 мс.

Метод text имеет много вариантов, если вы хотитеболее высокое разрешение, чтобы изменить выравнивание, обернуть строки в некоторый предел, изменить шрифт и т. д. и т. д.

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

...