基于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 相关文章推荐
怎么使 Mysql 数据同步
Oct 09 PHP
php中使用Akismet防止垃圾评论的代码
Jun 10 PHP
PHP session会话的安全性分析
Sep 08 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
php获取远程文件大小
Oct 20 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
PHP magento后台无法登录问题解决方法
Nov 24 PHP
PHP与以太坊交互详解
Aug 24 PHP
php实现算术验证码功能
Dec 05 PHP
PHP get_html_translation_table()函数用法讲解
Feb 16 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
php在文件指定行中写入代码的方法
2012/05/23 PHP
解析coreseek for sphinx的使用
2013/06/21 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
JS远程获取网页源代码实例
2013/09/05 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
jquery插件jSignature实现手动签名
2015/05/04 Javascript
JavaScript微信定位功能实现方法
2016/11/29 Javascript
JavaScript高阶函数_动力节点Java学院整理
2017/06/28 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
vue项目中在外部js文件中直接调用vue实例的方法比如说this
2019/04/28 Javascript
Vue+Express实现登录状态权限验证的示例代码
2019/05/05 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
[59:53]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第二场 3月6日
2021/03/11 DOTA
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
python3+dlib实现人脸识别和情绪分析
2018/04/21 Python
关于Tensorflow中的tf.train.batch函数的使用
2018/04/24 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
使用python脚本实现查询火车票工具
2018/07/19 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
Tensorflow tf.nn.depthwise_conv2d如何实现深度卷积的
2020/04/20 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
BNKR中国官网:带你感受澳洲领先潮流时尚
2018/08/21 全球购物
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
保送生自荐信
2015/03/06 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
如何解决goland,idea全局搜索快捷键失效问题
2022/04/03 Golang
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技