基于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 has encountered an Access Violation
Jan 15 PHP
php 过滤危险html代码
Jun 29 PHP
php更改目录及子目录下所有的文件后缀的代码
Sep 24 PHP
php max_execution_time执行时间问题
Jul 17 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
php不写闭合标签的好处
Mar 04 PHP
smarty简单应用实例
Nov 03 PHP
PHP扩展开发教程(总结)
Nov 04 PHP
yii实现model添加默认值的方法(2种方法)
Jan 06 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
phpstudy的php版本自由修改的方法
Oct 18 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中对xml读取的相关函数的介绍一
2008/06/05 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
js 获取Listbox选择的值的代码
2010/04/15 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
使用jQuery在移动页面上添加按钮和给按钮添加图标
2015/12/04 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
微信小程序实现下拉刷新动画
2019/06/21 Javascript
Angular8 简单表单验证的实现示例
2020/06/03 Javascript
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Linux下使用python自动修改本机网关代码分享
2015/05/21 Python
Python argv用法详解
2016/01/08 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Windows环境下python环境安装使用图文教程
2018/03/13 Python
详解python中的装饰器
2018/07/10 Python
python 实现A*算法的示例代码
2018/08/13 Python
python实现指定文件夹下的指定文件移动到指定位置
2018/09/17 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
python dumps和loads区别详解
2020/02/04 Python
python误差棒图errorbar()函数实例解析
2020/02/11 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
2020/02/29 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
2014迎新年晚会策划方案
2014/02/23 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
党员一帮一活动总结
2014/07/08 职场文书
因个人工作失误检讨书
2019/06/21 职场文书