问题
I want to convert following HTML to PNG image in Python.
<html>
<b>Bold text</b>
</html>
This HTML is, of course, an example.
I have tried 'pisa' but it converts html to PDF, not to image. I can convert HTML to PDF and then convert PDF to PNG, but I was wondering if there is any direct solution (i.e HTML to PNG). Any built-in or external module will work nicely.
If this can be done in Graphicsmagick or Imagemagick, then it will be perfect.
回答1:
webkit2png. The original version is OSX-only, but luckily there is a cross-platform fork: https://github.com/AdamN/python-webkit2png
回答2:
To expand on vartec's answer to also explain how to use it...
Install webkit2png
The easiest way is probably to simply clone the github repo and run the setup.
mkdir python-webkit2png
git clone https://github.com/adamn/python-webkit2png.git python-webkit2png
python setup.py install
This requires python and git to already be installed. For cygwin, this will add webkit2png as a command to the path. I haven't tested this for other terminals/OS.
Run it
Say you have your website in the current directory. (I had a html file that was using a css stylesheet - but there's no need to think about the css file.)
webkit2png something.html -o something.png
Optionswebkit2png -h
informs us:
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 (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
Notable options are the setting of width and height.
Troubleshooting
Using cygwin, I encountered webkit2png: cannot connect to X server :0.0
.
To fix this (I had already performed export DISPLAY=0.0
), I had to start an X-Server. On cygwin, this can be done by running startxwin
in a second terminal. Make sure to install it first via the cygwin setup.
回答3:
Another possible solution is to use GrabzIt's free HTML to Image API for Python. You could then convert your HTML to PDF code like this:
import GrabzItClient
grabzIt = GrabzItClient.GrabzItClient("APPLICATION KEY", "APPLICATION SECRET")
grabzIt.HTMLToImage("<html><b>Bold text</b></html>")
grabzIt.SaveTo("test.png")
Full disclosure I am the API creator.
来源:https://stackoverflow.com/questions/5633828/convert-html-to-an-image-in-python