有的时候,我们想对我们项目下的网页进行缩略图的展示,如下效果:
如果要实现上面的展示网页,需要三个步骤:
1. 生成网页的快照;
2. 把网页快照生成合适大小的缩略图;
3. 根据上面缩略图生成展示网页。
Ps:常见安装错误,请见本文档最后。
所谓生成网页的快照,就是对网页进行截图,我们这里用phantomjs来实现。
关于 phantomjs的详细用法可参考官方网站。
1.安装phantomjs
我这里用的linux系统环境是CentOS6.6,64位系统,所以安装64位版本的phantomjs;
64位下载地址:http://pan.baidu.com/s/1o6N5gmQ
如果你是32位系统,查看自己系统版本在官网下载(用命令:head -n 1 /etc/issue,查看自己linux系统信息)。
进入下载目录:
1).解压:tar -jxvf phantomjs-1.9.8-x86_64.tar.bz2
2).方便调用命令:cp phantomjs-1.9.8-linux-x86_64/bin/phantomjs/bin/phantomjs
2、调用
phantomjs的调用需要一个js脚本。这个js脚本接收两个参数,分别是网址url和快照文件名称filename,脚本snap.js内容如下:
var page = require('webpage').create();
var args = require('system').args;
var pageW = 1024;
var pageH = 768;
page.viewportSize = {
width: pageW,
height: pageH
};
var url = args[1];
var filename = args[2];
page.open(url, function (status) {
if (status !== 'success') {
console.log('Unable to load ' + url + ' !');
phantom.exit();
} else {
window.setTimeout(function () {
page.clipRect = { left: 0, top: 0, width: pageW, height: pageH };
page.render(filename);
console.log('finish:', filename);
phantom.exit();
}, 1000);
}
});
在这个脚本中还有个小小的设置,就是设置打开页面的浏览器可视区域的大小为1024*768,然后取第一屏内容。
调用命令如下:
phantomjs snap.js http://www.hexun.com myhexun.png
注意:1.这里执行命令的用户需要对目录有写权限。
2.上面图片中的error报错与生成图片无关,是打开网页中,网页内部的错误,可通过查看网页元素发现类似提示错误。(这可以看出phantomjs的功能远远不止截图这么简单…)
Ps:上述的snap.js的功能其实在phantomjs-1.9.8-linux-x86_64/examples目录下有此功能,在这个目录中集成了很多基本的功能,截图只是其中最常用的,在下面我们生成网页时还要用到此目录下的另一一个js。
需要安装ImageMagick,来对生成的图片进行缩放。
建议从源代码编译安装,这样不容易报错!(我这里是64位,不可照搬)
yum install tcl-devel.x86_64libpng-devel.x86_64 libjpeg-devel.x86_64 ghostscript-devel.x86_64bzip2-devel.x86_64 freetype-devel.x86_64 libtiff-devel.x86_64
yum install libjpeg-devel.x86_64 libpng-devel.x86_64 glib2-devel.x86_64 fontconfig-devel.x86_64zlib-devel.x86_64 libwmf-devel.x86_64 freetype-devel.x86_64libtiff-devel.x86_64
wget -chttp://downloads.sourceforge.net/project/imagemagick/ImageMagick/00-6.5.9/ImageMagick-6.5.9-7.tar.gz
tar -zxvf ImageMagick-6.5.9-7.tar.gz
cd ImageMagick-6.5.9-7
./configure --prefix=/usr --with-bzlib=yes --with-fontconfig=yes--with-freetype=yes --with-gslib=yes --with-gvc=yes --with-jpeg=yes--with-jp2=yes --with-png=yes --with-tiff=yes
make clean
make && make install
编译安装过程时间比较长,请耐心等待
安装后 convert 的路径是 /usr/bin/convert
你可以直接从命令行运行
convert -version
来看看版本
如果发现类似错误
# convert -version
convert: error while loading shared libraries: libMagickCore.so.3: cannot openshared object file: No such file or directory
那就 ldconfig/usr/ 一下,看看是不是好了
来搞张图片测试一下,从中间裁切200x200正方形图片
convert 1.jpg -gravity center -extent200x200 2.jpg
生成的图片最小的边要有500像素
convert 1.jpg -resize 500x500^ 2.jpg
合成一条,看看有多强大,你放张200x300左右的图片试下,这条命令将会将图片最小的边按比例强行扩大到500像素,再从正中央裁切200像素的正方式
convert 1.jpg -resize 500x500^ -gravitycenter -extent 200x200 2.jpg
给图片 base.jpg 在y100,x10的位置加上图片 sy.png 水印
composite -geometry +100+10 sy.png base.jpgfinished.jpg
我们在这里用到的只是简单的调用,上面只需了解即可;
Convert -resize320x240 myhexun.png newmyhexun.png
上面的就是把第一步生成的图片缩放并保存为newmyhexun.png
在上面两步,我们已经生成了所需要的图片,这样我们可以根据图片来生成网页,具体怎么写,不是本文重点,关键我们在写网页的时候,想从网页中取出title名称,而用它来命名我们的网页。
具体实现如下,我们在phantomjs-1.9.8-linux-x86_64/examples目录可以找到一个文件:
loadspeed.js,它主要用来测试一个网页的打开时间,和取出网页文档中title的名称,具体代码如下:
var page = require('webpage').create(),
system = require('system'),
t, address;
if (system.args.length === 1) {
console.log('Usage: loadspeed.js ');
phantom.exit(1);
} else {
t= Date.now();
address = system.args[1];
page.open(address, function (status) {
if (status !== 'success') {
console.log('FAIL to load the address');
} else {
t = Date.now() - t;
console.log('Pagetitle!@@!!is' + page.evaluate(function () {
return document.title;
}));
console.log('Loading time ' + t + ' msec');
}
phantom.exit();
});
}
调用命令和第一部生成图片一样:(网址一定要加http://前缀)
常见错误
在这所有的三步骤中,最常见的错误可能就是安装运行报错,提示缺少一些依赖库。
可用yum命令进行安装,
例如:提示缺少libicu developer依赖:
yum installlibicu-dev
也可在http://pkgs.org/download/libfontconfig.so.1中搜索相关的的包(建议下载rpm的,容易安装),版本要选择对。
下面有一些错误的参考文档:
CentOS下安装 ImageMagick时缺失freetype的解决方法