Подтвердить что ты не робот

Преобразование HTML в изображение в Python

Я хочу преобразовать следующий образ HTML в PNG в Python.

<html>
    <b>Bold text</b>
</html>

Этот HTML, конечно, является примером.

Я попробовал "pisa", но он конвертирует html в PDF, а не в изображение. Я могу конвертировать HTML в PDF, а затем конвертировать PDF в PNG, но мне было интересно, есть ли какое-либо прямое решение (например, HTML для PNG). Любой встроенный или внешний модуль будет работать хорошо.

Если это можно сделать в Graphicsmagick или Imagemagick, то это будет прекрасно.

4b9b3361

Ответ 2

Чтобы расширить на vartec ответ, также объясните, как его использовать...

Установить webkit2png
Самый простой способ - это просто клонировать репозиторий github и запускать настройку.

mkdir python-webkit2png
git clone https://github.com/adamn/python-webkit2png.git python-webkit2png
python setup.py install

Для этого необходимо установить python и git. Для cygwin это добавит webkit2png в качестве команды к пути. Я не тестировал это для других терминалов/ОС.

Запустить его
Скажем, у вас есть ваш сайт в текущем каталоге. (У меня был html файл, который использовал таблицу стилей CSS, но нет необходимости думать о файле css.)

webkit2png something.html -o something.png

Опции
webkit2png -h сообщает нам:

Options:
  --version             show program version number and exit
  -h, --help            show this help message and exit
  -x WIDTH HEIGHT, --xvfb=WIDTH HEIGHT
                        Start an 'xvfb' instance with the given desktop size.
  -g WIDTH HEIGHT, --geometry=WIDTH HEIGHT
                        Geometry of the virtual browser window (0 means
                        'autodetect') [default: (0, 0)].
  -o FILE, --output=FILE
                        Write output to FILE instead of STDOUT.
  -f FORMAT, --format=FORMAT
                        Output image format [default: png]
  --scale=WIDTH HEIGHT  Scale the image to this size
  --aspect-ratio=RATIO  One of 'ignore', 'keep', 'crop' or 'expand' [default:
                        none]
  -F FEATURE, --feature=FEATURE
                        Enable additional Webkit features ('javascript',
                        'plugins')
  -c COOKIE, --cookie=COOKIE
                        Add this cookie. Use multiple times for more cookies.
                        Specification is value of a Set-Cookie HTTP response
                        header.
  -w SECONDS, --wait=SECONDS
                        Time to wait after loading before the screenshot is
                        taken [default: 0]
  -t SECONDS, --timeout=SECONDS
                        Time before the request will be canceled [default: 0]
  -W, --window          Grab whole window instead of frame (may be required
                        for plugins)
  -T, --transparent     Render output on a transparent background (Be sure to
                        have a transparent background defined in the html)
  --style=STYLE         Change the Qt look and feel to STYLE (e.G. 'windows').
  --encoded-url         Treat URL as url-encoded
  -d DISPLAY, --display=DISPLAY
                        Connect to X server at DISPLAY.
  --debug               Show debugging information.
  --log=LOGFILE         Select the log output file

Значимыми параметрами являются установка ширины и высоты.

Поиск проблемы
Используя cygwin, я столкнулся с webkit2png: cannot connect to X server :0.0. Чтобы исправить это (я уже выполнил export DISPLAY=0.0), мне пришлось запустить X-Server. На cygwin это можно сделать, запустив startxwin во втором терминале. Обязательно установите его сначала с помощью настройки cygwin.

Ответ 3

Другим возможным решением является использование GrabzIt бесплатного HTML для Image API для Python. Затем вы можете преобразовать свой HTML в PDF-код следующим образом:

import GrabzItClient
grabzIt = GrabzItClient.GrabzItClient("APPLICATION KEY", "APPLICATION SECRET")
grabzIt.HTMLToImage("<html><b>Bold text</b></html>")    
grabzIt.SaveTo("test.png")

Полное раскрытие Я создатель API.