前言
想要将HTML转换为Image是因为我们的一个晒课程的需求,将我们的数据通过图片的方式转换出来,便于传播。这样的问题可能第一个就想到要用ImageMagick来做,重新画一遍,我嫌重新画太麻烦,而且有重复劳动。希望有一个工具能将我们已经做好的HTML页面直接转换为图片。
方法
Linux
Linux下有下面三个方法
1.
khtml2png可以将html转成图片格式,有如下要求:
g++
KDE 3.xkdelibs for KDE 3.x (kdelibs4-dev)zlib (zlib1g-dev)cmake
其他都好说,KDE太坑爹了,我一Linux服务器还要装上庞大的KDE。看到这个条件,我立马就放弃了。
2.
CutyCapt使用起来也不难
./CutyCapt --url= --out=example.png
它的部署要求是:
CutyCapt depends on Qt 4.4.0+.
它比khtml2png好的一点是它可以不用装X server,可以用Xvfb这种轻量级的东西,然后就可以这样用了
xvfb-run --server-args="-screen 0, 1024x768x24" ./CutyCapt --url=... --out=...
3.htmlpdfpng
这始终曲线救国的方式,如果是在不想装上面的东西,可以先将东西转成pdf,再转。
这种比上述几种要稍微好一些,但同样需要QT的支持,只是会自动给你装好。用到的是,,。在安装wkhtmltopdf时会自动安装QT的支持,而RMagick还需要一个插件才能支持读取PDF文件(具体名称忘了,见出错信息)Mac
Mac下同样支持以上几种方式,而且还有一个专门针对Mac系统的工具,只需要符合
Check your computer has Mac OS X 10.2 or later, Safari 1.0 or later, and PyObjC 1.1 or later. If you have Mac OS X 10.5 Leopard or later everything you need is installed already.
就可以了。使用上也非常容易
python /path/to/webkit2png
Windows
Windows可以使用。也可以直接使用IE Com对象。就像:
Size mySize= webBrowser1.Document.Window.Size ; Bitmap myPic=new Bitmap (mySize.Width ,mySize.Height ); Rectangle myRec=new Rectangle (0,0,mySize.Width,mySize.Height ); webBrowser1.Size=mySize; webBrowser1.DrawToBitmap(myPic,myRec); myPic.Save ("c:\\aaaaaa.jpg");
总结
所有的方法都需要UI环境(比如QT)以及浏览器插件(比如WebKit)的支持。所以在linux上安装不可避免的需要这些环境,我们唯一能做的就是将这些环境的代价降到最低。