phantomjs截圖的實踐


    年前也做了一些東西,由於過年只顧瘋了,也沒有整理,年后補上把~ 今天整理一下個phantomjs截圖實踐中遇到的問題。    
 
    最近做的一個項目,需要在首頁展示已經做的一些項目的縮略圖,方便在查找的時候,更方便的知道這個項目是一個什么樣的頁面。本身使用的thinkjs寫的系統,所以找到了使用phantomjs進行截圖,所以查到了phantomjs的Web Page Module,可以完成截圖。同時找到了截圖的例子,簡單的截圖就可以直接使用了。但是現實永遠是殘酷的,在使用過程中遇到了一下一些問題:亂碼問題,圖片大小問題,登錄狀態問題。
 
    接下來就上述提到的一些問題,給出我的一些解決方案。
 
    第一:亂碼問題
  • gbk亂碼,也就是截圖出現口等亂碼
yum install bitmap-fonts bitmap-fonts-cjk //centos
apt-get install xfonts-wqy //ubuntu
        安裝了上面的字體,基本上就不會出現亂碼問題了,但是字體還是存在粗細不一致的問題。
  • 字體粗細不一致問題
        這個問題的原因是截圖服務器上沒有安裝頁面所需的字體,解決方案就是安裝所需字體。如何在centos上安裝字體? ,這里需要注意的是,/usr/share/fonts這個目錄是root權限,可以通過上傳到其他目錄然后移動過來。
 
    第二:圖片大小問題
    大致有四種途徑調整:
  • viewportSize,這個設置的是頁面預覽的窗口大小,直接影響生成圖片的大小,如果需要全屏,那么這個配置不能過小
  • clipRect可以配合viewportSize使用,可以剪切出某個固定大小的圖片
  • zoomFactor可以縮放,感覺用起來效果不好
  • 如果圖片是在頁面展示的話,可以改變img的大小,這個的問題是有可能壓縮圖片質量,並且原始圖片太大的話,資源比較大(這個方法比較奇葩,慎用)。
 
    第三:登錄狀態問題(cookie問題)
    這里需要設置cookie也是一個比較特殊的場景,就是我需要截圖的頁面是需要登錄狀態的,所以需要把頁面的cookie帶過去,這里以登錄cookie為例,其他的cookie是相同的處理方式。
/*以下都是不可缺少的,特別是domain,沒有默認值,這里踩過坑*/
phantom.addCookie({
	'name'     : 'cookie-name',
	'value'    : 'cookie-value',
	'path'     : '/',
	'domain'   : domain,
	'expires'  : (new Date()).getTime() + (1000 * 60 * 60)
});
 
    這樣簡單的截圖基本上都可以搞定了,需要注意的時候,如果訪問https的頁面還需要配置:--ignore-ssl-errors=true,簡單的調用例子如下:
    phantomjs [options] somescript.js [arg1 [arg2 [...]]]
    //option填寫需要的一些參數,比如:--ignore-ssl-errors=true
    其他的一些option參數,可以參考:Command Line Interface
 
    phantomjs功能比較多,因為項目需要學習了一下,截圖這個API,其他的需要的可以自己看看。
 
 
參考資料:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM