前言
想要將HTML轉換為Image是因為我們的一個曬課程的需求,將我們的數據通過圖片的方式轉換出來,便於傳播。這樣的問題可能第一個就想到要用ImageMagick來做,重新畫一遍,我嫌重新畫太麻煩,而且有重復勞動。希望有一個工具能將我們已經做好的HTML頁面直接轉換為圖片。
方法
Linux
Linux下有下面三個方法
1. khtml2png
khtml2png可以將html轉成圖片格式,有如下要求:
g++
KDE 3.x
kdelibs for KDE 3.x (kdelibs4-dev)
zlib (zlib1g-dev)
cmake
其他都好說,KDE太坑爹了,我一Linux服務器還要裝上龐大的KDE。看到這個條件,我立馬就放棄了。
2. CutyCapt
CutyCapt使用起來也不難
./CutyCapt --url=http://www.example.org --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.html->pdf->png
這始終曲線救國的方式,如果是在不想裝上面的東西,可以先將東西轉成pdf,再轉。
這種比上述幾種要稍微好一些,但同樣需要QT的支持,只是會自動給你裝好。用到的是PDFKit,wkhtmltopdf,RMagick。在安裝wkhtmltopdf時會自動安裝QT的支持,而RMagick還需要一個插件才能支持讀取PDF文件(具體名稱忘了,見出錯信息)
Mac
Mac下同樣支持以上幾種方式,而且還有一個專門針對Mac系統的工具webkit2png,只需要符合
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 http://www.google.com/
Windows
Windows可以使用IECapt。也可以直接使用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上安裝不可避免的需要這些環境,我們唯一能做的就是將這些環境的代價降到最低。