Convertir HTML a una imagen en Python

Quiero convertir la siguiente imagen HTML a PNG en Python.

 Bold text  

Este HTML es, por supuesto, un ejemplo.

He intentado ‘pisa’ pero convierte html a PDF, no a imagen. Puedo convertir HTML a PDF y luego convertir PDF a PNG, pero me preguntaba si hay alguna solución directa (es decir, HTML a PNG). Cualquier módulo incorporado o externo funcionará bien.

Si esto se puede hacer en Graphicsmagick o Imagemgick, entonces será perfecto.

webkit2png. La versión original es solo para OSX, pero afortunadamente hay una bifurcación multiplataforma: https://github.com/AdamN/python-webkit2png

Para ampliar la respuesta de vartec para explicar también cómo usarla …

Instalar webkit2png
La forma más fácil es probablemente simplemente clonar el repository de github y ejecutar la configuración.

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

Esto requiere que Python y Git ya estén instalados. Para cygwin, esto agregará webkit2png como un comando a la ruta. No he probado esto para otros terminales / OS.

Ejecutarlo
Digamos que tienes tu sitio web en el directorio actual. (Tenía un archivo html que usaba una hoja de estilo css, pero no hay necesidad de pensar en el archivo css).

 webkit2png something.html -o something.png 

Opciones
webkit2png -h nos informa:

 Options: --version show program's 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 (eG '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 

Las opciones notables son la configuración de ancho y alto.

Solución de problemas
Usando cygwin, encontré webkit2png: cannot connect to X server :0.0 . Para solucionar esto (ya había realizado la export DISPLAY=0.0 ), tuve que iniciar un X-Server. En cygwin, esto se puede hacer ejecutando startxwin en un segundo terminal. Asegúrese de instalarlo primero a través de la configuración de cygwin.

Otra solución posible es utilizar el HTML gratuito de GrabzIt para API de imagen para Python . Luego puedes convertir tu código HTML a PDF de esta manera:

 import GrabzItClient grabzIt = GrabzItClient.GrabzItClient("APPLICATION KEY", "APPLICATION SECRET") grabzIt.HTMLToImage("Bold text") grabzIt.SaveTo("test.png") 

Revelación completa Soy el creador de la API.