基于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出错界面
Oct 09 PHP
PHP内核探索:变量存储与类型使用说明
Jan 30 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php下Memcached入门实例解析
Jan 05 PHP
php获取当月最后一天函数分享
Feb 02 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
PHP生成唯一订单号
Jul 05 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php的curl实现get和post的代码
2008/08/23 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
2010/03/23 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
js 异步处理进度条
2010/04/01 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
javascript实现拖放效果
2015/12/16 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
Vue组件选项props实例详解
2017/08/18 Javascript
详解js类型判断
2018/05/22 Javascript
video.js 实现视频只能后退不能快进的思路详解
2018/08/09 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
python登录豆瓣并发帖的方法
2015/07/08 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python 利用邮件系统完成远程控制电脑的实现(关机、重启等)
2019/11/19 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
巴西24小时在线药房:Droga Raia
2020/05/12 全球购物
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
开网店计划分析
2019/07/30 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL
mysql 生成连续日期及变量赋值
2022/03/20 MySQL