基于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随机字符串生成代码(包括大小写字母)
Jun 24 PHP
php创建sprite
Feb 11 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP中的常见魔术方法功能作用及用法实例
Jul 01 PHP
php实现数组中索引关联数据转换成json对象的方法
Jul 08 PHP
thinkphp如何获取客户端IP
Nov 03 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
php实现的一段简单概率相关代码
May 30 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 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
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
jQuery之尺寸调整组件的深入解析
2013/06/19 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
2014/01/07 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
javascript的正则匹配方法学习
2016/02/24 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
JS实现的RGB网页颜色在线取色器完整实例
2016/12/21 Javascript
详解js几个绕不开的事件兼容写法
2017/08/30 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
基于Vue 2.0 监听文本框内容变化及ref的使用说明介绍
2018/08/24 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
2018/09/16 Javascript
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
2019/05/17 jQuery
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
简单的连接MySQL与Python的Bottle框架的方法
2015/04/30 Python
python实现上传下载文件功能
2020/11/19 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python多线程分块读取文件
2019/08/29 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
python要安装在哪个盘
2020/06/15 Python
用python对oracle进行简单性能测试
2020/12/05 Python
美国的Eastbay旗下的运动款子品牌:Final-Score
2018/01/01 全球购物
医院实习接收函
2014/01/12 职场文书
房屋出售协议书
2014/04/10 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
初三语文教学反思
2016/03/03 职场文书
angular4实现带搜索的下拉框
2022/03/25 Javascript
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL