最近打算做一个网址收藏系统,想到了当用户收藏一个网址的时候,自动根据网址给当前网页拍一张快照,防止对方网页因为外因不能访问导致看不到内容,于是开始尝试根据url给网页截图!
第一种,使用php的函数
| 
					 1 2 3  | 
						set_time_limit(60); $im = imagegrabscreen(); imagepng($im, "snap1.png");  | 
					
这种方法我尝试了,可以获取到截图,但是只局限于当前网址…
例如我在phpstorm的控制台运行了php文件,结果把我的编辑器界面截图了…意外…
第二种,使用phantomjs
看到这个东西可以截图,于是我在服务器安装了这个软件,写了js’代码调用截图
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						var page = require('webpage').create(); var args = require('system').args; var url = args[1]; var filename = args[2]; setTimeout(function () {     page.open(url, function () {         page.render(filename);         phantom.exit();     }); },1000);  | 
					
事实证明这个并没有网上说的那么好用,截出来的图片不是缺东西就是乱码!
如图是我截的微云首页和百度首页
好吧,我放弃了,开始安装php扩展
第三种,使用zhtmltopdf
安装编译就不说了,直接调用截图先看看效果吧!
php简单写了个单例模式的model
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49  | 
						<?php /**  * Created by PhpStorm.  * User: iyahe@qq.com (天明)  * Date: 2017/3/12  * Time: 14:20  */ namespace Common\Model; use Api\Controller\UploadController; use Think\Model; class ImgModel extends Model {     private static $_instance;     protected static $root;     protected $tableName = 'user';     public static function start(){         self::$root = $_SERVER['DOCUMENT_ROOT'].'/Uploads/thumb/';         if(!self::$_instance){             self::$_instance = new self();         }         return self::$_instance;     }     //调用不存在的静态方法跳转到此     public static function __callStatic($name, $arguments)     {         $_instance = self::start();         return call_user_func_array([$_instance,$name],$arguments);     }     public function makeImg($url){         set_time_limit(0);         $path = self::$root.md5($url).'.jpg';         if(zhtml2img($url,$path)){             return self::uplaod($path);         }     }     public function makePdf($url){         $path = self::$root.md5($url);         return zhtml2pdf($url,$path);     }     public function getImg($url){         $path = self::$root.md5($url).'.jpg';         return zhtml2img($url);     }     protected static function uplaod($path){        $upload = new UploadController();        return $upload->qiniu($path,'jpg','url');     } }  | 
					
调用并且输出内容
| 
					 1 2  | 
						$result = ImgModel::start()->makeImg('https://www.baidu.com/'); p($result);  | 
					
由于我的最后一步是上传图片到七牛云存储,于是收到结果如下:
| 
					 1 2 3 4 5  | 
						Array (     [hash] => Fj5X0QVgOKzRhh8BX7I9k5YomT2q     [key] => url/904fd6bb708eff6cb07a9aa2f99be4f2.jpg )  | 
					

截图结果如上,
需要注意的是,原本使用扩展截图也是有乱码,需要在liunx服务器上设置中文并且上传一个中文字体,
官方解释:
一、线上服务器乱码解决:
1)系统的LANG设置为: LANG=zh_CN.UTF-8
2) 缺少字体,可以把本地的字体copy到服务器上 /usr/share/fonts/chinese/TrueType目录下
我把本机电脑的 微软雅黑 字体上传到了服务器的目录!
雅荷心语博客

