基于linnux+phantomjs实现生成图片格式的网页快照


Posted in PHP onApril 15, 2015

安装扩展:
  (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git
    安装casperjs

    cd /

    git clone git://github.com/n1k0/casperjs.git

    cd casperjs

    ln -sf /casperjs/bin/casperjs /usr/local/bin/casperjs  //可以忽略 实际执行中php是执行 /casperjs/bin/casperjs

 
    (2)安装phantomjs,下载地址:http://phantomjs.org/download.html
       下载后操作很简单,直接把解压好的\bin\phantomjs移动到\usr\local\bin\phantomjs就可以了。\
       测试phantomjs --version 有结果不报错,说明安装OK
 
    (3)安装字体
      1. 首先获得一套“微软雅黑”字体库(Google一下一大把),包含两个文件msyh.ttf(普通)、msyhbd.ttf(加粗);
      2. 在/usr/share/fonts目录下建立一个子目录,例如win,命令如下:
# mkdir /usr/share/fonts/win

      3. 将msyh.ttf和msyhbd.ttf复制到该目录下,例如这两个文件放在/root/Desktop下,使用命令:

 # cd /root/Desktop

 # cp msyh.ttf msyhbd.ttf  /usr/share/fonts/win/

      4. 建立字体索引信息,更新字体缓存:

   # cd /usr/share/fonts/win

          # mkfontscale  (如果提示 mkfontscale: command not found,需自行安装 # yum install mkfontscale )

          # mkfontdir

          # fc-cache    (如果提示 fc-cache: command not found,则需要安装# yum install fontconfig )

   至此,字体已经安装完毕!

<?php 
  if (isset($_GET['url'])) 
  { 
    set_time_limit(0); 
  
    $url = trim($_GET['url']); 
    $filePath = md5($url).'.png'; 
    if (is_file($filePath)) 
    { 
      exit($filePath); 
    } 
 
    //如果不加这句就会报错“Fatal: [Errno 2] No such file or directory; did you install phantomjs?”,详情参考http://mengkang.net/87.html
    putenv("PHANTOMJS_EXECUTABLE=/usr/local/bin/phantomjs");
    $command = "phantomjs phantomjs.js {$url} {$filePath}"; 
    @exec($command); 
  
    exit($filePath); 
  } 
?> 
  
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
<meta name="keywords" content="" /> 
<meta name="description" content="" /> 
<title>快照生成</title> 
<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script> 
<style> 
* {margin: 0; padding: 0; } form {padding: 20px; } div {margin: 20px 0 0; } input {width: 200px; padding: 4px 2px; } #placeholder {display: none; } 
</style>
</head> 
  
<body> 
  <form action="" id="form"> 
    <input type="text" id="url" /> 
    <button type="submit">生成快照</button> 
  
    <div> 
      <img src="" alt="" id="placeholder" /> 
    </div> 
  </form> 
  <script> 
  $(function(){ 
    $('#form').submit(function(){ 
      if (typeof($(this).data('generate')) !== 'undefined' && $(this).data('generate') === true) 
      { 
        alert('正在生成网站快照,请耐心等待...'); 
        return false; 
      } 
  
      $(this).data('generate', true); 
      $('button').text('正在生成快照...').attr('disabled', true); 
  
      $.ajax({ 
        type: 'GET', 
        url: '?', 
        data: 'url=' + $('#url').val(), 
        success: function(data){ 
          $('#placeholder').attr('src', data).show(); 
          $('#form').data('generate', false); 
          $('button').text('生成快照').attr('disabled', false); 
        } 
      }); 
  
      return false; 
    }); 
  }); 
  </script> 
</body> 
</html>




var page = require('webpage').create(); 
var args = require('system').args; 
 
var url = args[1]; 
var filename = args[2]; 
 
page.open(url, function () { 
  page.render(filename); 
  phantom.exit(); 
});

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php防注
Jan 15 PHP
PHP setcookie() cannot modify header information 的解决方法
Jan 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
用php实现让页面只能被百度gogole蜘蛛访问的方法
Dec 29 PHP
批量获取memcache值并按key的顺序返回的实现代码
Jun 14 PHP
超级实用的7个PHP代码片段分享
Jan 05 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
Jun 28 PHP
ThinkPHP入口文件设置及相关注意事项分析
Dec 05 PHP
如何利用http协议发布博客园博文评论
Aug 03 PHP
PHP网站自动化配置的实现方法(必看)
May 27 PHP
PHP isset empty函数相关面试题及解析
Dec 11 PHP
微信API接口大全
Apr 15 #PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 #PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 #PHP
php获取Google机器人访问足迹的方法
Apr 15 #PHP
分享自定义的几个PHP功能函数
Apr 15 #PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
Apr 14 #PHP
PHP也能干大事 随机函数
Apr 14 #PHP
You might like
给WordPress的编辑后台添加提示框的代码实例分享
2015/12/25 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
微信公众号之主动给用户发送消息功能
2019/06/22 PHP
JavaScript版代码高亮
2006/06/26 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
JavaScript实现拖拽元素对齐到网格(每次移动固定距离)
2016/11/30 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
原生js实现贪食蛇小游戏的思路详解
2019/11/26 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
python生成指定长度的随机数密码
2014/01/23 Python
以一段代码为实例快速入门Python2.7
2015/03/31 Python
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
长安大学毕业生自我鉴定
2014/01/17 职场文书
预备党员的自我评价
2014/03/12 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
2015年英语教师工作总结
2015/05/20 职场文书
初一年级组工作总结
2015/08/12 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
聊一聊python常用的编程模块
2021/05/14 Python
判断Python中的Nonetype类型
2021/05/25 Python