基于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安装全攻略:APACHE
Oct 09 PHP
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
Zend 输出产生XML解析错误
Mar 03 PHP
Ext.data.PagingMemoryProxy分页一次性读取数据的实现代码
Apr 07 PHP
PHP高级对象构建 多个构造函数的使用
Feb 05 PHP
ajax完美实现两个网页 分页功能的实例代码
Apr 16 PHP
PHP循环函数使用介绍之PHP基础入门教程
Sep 21 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
Nov 07 PHP
PHP面向对象之事务脚本模式(详解)
Jun 07 PHP
PHP区块查询实现方法分析
May 12 PHP
Laravel事件监听器用法实例分析
Mar 12 PHP
Laravel重定向,a链接跳转,控制器跳转示例
Oct 22 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下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
php通过asort()给关联数组按照值排序的方法
2015/03/18 PHP
PHP+MySQL实现消息队列的方法分析
2018/05/09 PHP
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
由JavaScript技术实现的web小游戏(不含网游)
2010/06/12 Javascript
基于JQuery实现CheckBox全选全不选
2011/06/27 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
jQuery.position()方法获取不到值的安全替换方法
2015/03/13 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
解决URL地址中的中文乱码问题的办法
2017/02/10 Javascript
微信小程序实现实时圆形进度条的方法示例
2017/02/24 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
小程序实现横向滑动日历效果
2019/10/21 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
Ajax获取node服务器数据的完整步骤
2020/09/20 Javascript
python 图片验证码代码
2008/12/07 Python
基于Linux系统中python matplotlib画图的中文显示问题的解决方法
2017/06/15 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
高校自主招生自荐信
2013/12/09 职场文书
小学优秀学生评语
2014/12/29 职场文书
车队安全员岗位职责
2015/02/15 职场文书
圆明园观后感
2015/06/03 职场文书
八一建军节主持词
2015/07/01 职场文书
2016优秀教师先进个人事迹材料
2016/02/25 职场文书
总结几个非常实用的Python库
2021/06/26 Python