基于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 相关文章推荐
再次研究下cache_lite
Feb 14 PHP
FleaPHP的安全设置方法
Sep 15 PHP
需要发散思维学习PHP
Jun 29 PHP
php中用数组的方法设置cookies
Apr 21 PHP
精美漂亮的php分页类代码
Apr 02 PHP
PHP实现模仿socket请求返回页面的方法
Nov 04 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
PHP实现抓取迅雷VIP账号的方法
Jul 30 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
PHP sleep()函数, usleep()函数
Aug 25 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
php获取是星期几的的一些常用姿势
Dec 15 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分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
最简单的JavaScript图片轮播代码(两种方法)
2015/12/18 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
sublime text配置node.js调试(图文教程)
2017/11/23 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
python如何求解两数的最大公约数
2018/09/27 Python
浅析python 中大括号中括号小括号的区分
2019/07/29 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
基于python爬取有道翻译过程图解
2020/03/31 Python
Python通过len函数返回对象长度
2020/10/22 Python
Python类型转换的魔术方法详解
2020/12/23 Python
基于PyTorch中view的用法说明
2021/03/03 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
实例讲解CSS3中Transform的perspective属性的用法
2016/04/22 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
美国美妆网站:B-Glowing
2016/10/12 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
网络工程师个人的自我评价范文
2013/10/01 职场文书
班长岗位职责
2013/11/10 职场文书
应用心理学个人的求职信
2013/12/08 职场文书
初中班主任评语大全
2014/04/24 职场文书
企业指导教师评语
2014/04/28 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
mybatis 获取更新记录的id
2022/05/20 Java/Android