年前也做了一些东西,由于过年只顾疯了,也没有整理,年后补上把~ 今天整理一下个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,其他的需要的可以自己看看。
 
 
参考资料:

最新文章

  1. 微信小程序之用户数据解密(七)
  2. 线性分式变换(linear fractional transformation)
  3. Linux解读
  4. LINUX下的拨号利器:wvdial和pppd —— 转载
  5. C语言的数组名和对数组名取地址
  6. poj 1502 最短路+坑爹题意
  7. 线性判别分析(Linear Discriminant Analysis)转载
  8. DataGridView的DataGridViewCheckBox问题
  9. PHP文章管理
  10. PC-CSS-多浏览器支持HTML5
  11. 更符合面向对象的数据库操作方式-OrmLite
  12. Shape of HDU
  13. Matlab安装完成后,出现错误licensing error:-8523的解决方法
  14. EF Code First 导航属性 与外键(转载)
  15. day05 判断敏感字符
  16. 【Java】 剑指offer(46) 把数字翻译成字符串
  17. Kubernetes之Controllers一
  18. SAP字段与表的对应关系
  19. tomcat设置默认启动项
  20. idea 高级调试技巧

热门文章

  1. Array,ArrayList 和 List<T>的选择和性能比较.
  2. MVC ViewData和ViewBag
  3. SQLite 入门教程(三)好多约束 Constraints
  4. 对 Xcode 菜单选项的详细探索(转)
  5. Composite 模式的实现
  6. 了解负载均衡 会话保持 session同步(转)
  7. centos中文乱码修改字符编码使用centos支持中文
  8. Java学习----一个对象怎么调用另一个对象呢?
  9. jsp注释方式
  10. E: Some packages could not be authenticated