基于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中常见的mongodb查询操作
Jun 20 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
thinkphp3.0输出重复两次的解决方法
Dec 19 PHP
PHP日期函数date格式化UNIX时间的方法
Mar 19 PHP
php开发中的页面跳转方法总结
Apr 26 PHP
PHP用户验证和标签推荐的简单使用
Oct 31 PHP
php批量删除操作代码分享
Feb 26 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
tp5.1 框架join方法用法实例分析
May 26 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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
乱谈我对耳机、音箱的感受
2021/03/02 无线电
PHP之变量、常量学习笔记
2008/03/27 PHP
php生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
PHP5.3新特性小结
2016/02/14 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
JavaScript实现多个重叠层点击切换效果的方法
2015/04/24 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
JS删除数组里的某个元素方法
2018/02/03 Javascript
node.js自动上传ftp的脚本分享
2018/06/16 Javascript
Echart折线图手柄触发事件示例详解
2018/12/16 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
javascript面向对象创建对象的方式小结
2019/07/29 Javascript
es6函数之rest参数用法实例分析
2020/04/18 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
[01:29:46]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第二局
2016/02/27 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
使用python爬取B站千万级数据
2018/06/08 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python的faker库用法
2019/11/28 Python
pytorch 自定义卷积核进行卷积操作方式
2019/12/30 Python
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
学生感冒英文请假条
2014/02/04 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
销售主管竞聘书
2014/03/31 职场文书
教师新年寄语
2014/04/03 职场文书
英文请假条
2014/04/11 职场文书
国际商贸专业自荐信
2014/06/09 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
如何在C++中调用Python
2021/05/21 Python