开发中需要用到phantomjs截图,研究半天,开始在winsows下运行,可以成功截图,但是不部署到linux'下后,不能成功应用。一下主要分别讲解两者的使用。
一、windows下使用:
下载window版本phantomjs和casperjs
先写好一个test.js文件
var page = require('webpage').create(); var args = require('system').args; var url = args[1];//获取传入参数,要截取的url地址 var filename = args[2];//获取截图图片保存路径和名称 page.viewportSize = { width: 1024, height: 760 }; page.open(url, function () { page.render(filename); phantom.exit(); });
然后php代码,需要执行text文件
$url = $url; $filePath = 'upload55'.png'; $pathtomjs = "PHANTOMJS_EXECUTABLE=".$local."/src/phantomjs/bin"; putenv($pathtomjs); $ss = $pathfile."/src/phantomjs/bin/phantomjs.exe"; $tt = $pathfile."/public/wechat/css/test.js"; //$command = $pathfile."/src/phantomjs/bin/phantomjs.exe ".$pathfile."/public/wechat/css/test.js {$url} {$filePath}"; $command = $local."/src/phantomjs/bin/phantomjs.exe ".$local."/public/wechat/css/test.js {$url} {$filePath}"; @exec($command);运行php文件,就会生生成一张$filepath的图片。
windows下开发后部署到linux下,不能成功生成截图图片。
那么linux下面应用phantonjs怎样操作该功能呢
二、linux安装phantomjs
当前登录用户是root用户
#1、makedir ~/bin
2、 cd ~/bin/
3、wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-1.9.7-linux-x86_64.tar.bz2//下载安装包
4、tar -xjvf phantonjs-1.9.7-linux-x86_64.tar.bz2
当时执行这个解压命令不管用,是因为服务器没有安装解压.bz2的解压工具
5、安装解压工具 ,那么安装tar.bz2环境
yum install bzip2
安装后,继续用上面4的方法解压文件,其中参数 x指解压,j指bz2方式,v详细显示,f使用文档名
6、将可执行文件放入系统路径
sudo ln -s ~/bin/phantomjs-1.9.7-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
7、安装依赖 fontconfig freetype
yum install fontconfig freetype2
以上安装完phantomjs
终端上输入phantomjs -v 显示版本号,即安装成功。
测试应用
cd /root/bin/phantomjs-1.9.7-linux-x86_64/bin
在该目录下创建 test.js
1 var page = require('webpage').create(); 2 page.open('https://www.baidu.com/', function () { 3 page.render('test/example.png'); 4 phantom.exit(); 5 });
保存后,在该目录下进行测试
终端输入:phantomjs test.js
在该目录下会出现一个test文件夹,里面个图片
以上功能就完成了。
但是实际操作中会出现意向不到的问题,
开始截图是出现乱码问题,那么可能是没有字体,可以将windows下面的字体拷贝到服务器上。
通过一下命令查看服务器有哪些字体。
fc-list :lang=zh
将字体复制到linux字体系统文件目录,并修改权限
/usr/share/fonts/bitmap
建立字体缓存
sudo mkfontscale
sudo mkfontdir
sudo fc-cache -fv 以上linux下面的phantonjs算是成功完成,那么在php端运用的时候是怎样的呢,以上只是在终端执行的效果
php代码如下
$url = $url;//要截图的url地址 $pathfile = $_SERVER['DOCUMENT_ROOT']; $filePath = $pathfile.'/upload/chufang/'.$user_id.'.png';//截取图片路径和名称 $tt ="/root/bin/phantomjs-1.9.7-linux-x86_64/bin/test.js";//引用的js,指定绝对路径 $command ="/root/bin/phantomjs-1.9.7-linux-x86_64/bin/phantomjs {$tt} {$url} {$filePath} ";//指定phantomjs下面的路径 exec($command);由于上面command有参数,所以texst.js下面因该有相应的参数
test.js代码
var page = require('webpage').create(); var args = require('system').args; var url = args[1]; var filename = args[2]; page.viewportSize = { width: 1024, height: 760 }; page.open(url, function () { page.render(filename); phantom.exit(); });以上为动态的截图应用,可以指定动态的url和图片名称。最后让人头痛的是,以上在终端执行的时候能跑通,但是,php运行怎样都没有效果。。。
最后是权限的问题,要把图片路径以及command执行的js等目录修改权限777.
注意,root用户安装的,项目运行时其他用户,没有权限执行,因此建议安装的时候不要放在root目录下面。否则修改权限后不安全。
以上是整理内容。