想要通过程序获取网页截图,由于是Linux系统,可能的解决方法是选择Gecko或者WebKit渲染引擎。Gecko的开放程度不如WebKit,相关项目和文档少,因此选择了WebKit。Gtk和Qt都有对WebKit的集成,但Gtk的依赖包太多,依赖包之间的版本匹配很重要,由于不做浏览器开发,几经尝试后放弃。Qt的代码很整洁,依赖关系少,能在CentOS
6的开发环境顺利编译通过(如果想尝尝C++11而搞了个gcc
4.8编译环境,编译Qt还有个小问题,网上有patch),这里简要介绍下:
1 获取Qt源码,切换到源码目录,基于4.8版本创建自己的git分支:
git clone git://gitorious.org/qt/qt.git
cd qt
git branch myqt origin/4.8
git checkout myqt
2 配置源码,启用4线程编译,编译后安装
./configure --prefix=/path/to/your/installation
make -j 4
make install
这个过程很长很长,可以喝杯咖啡或者刷刷微博。
截取网页的程序Qt有范例,参考
http://doc.qt.digia.com/4.7/webkit-framecapture.html
示范程序无法自动调整页面大小,调整算法可参考wkhtml2pdf项目
http://code.google.com/p/wkhtmltopdf/
程序完成后总觉得字体渲染太丑,可考虑安装ms windows字体。新建字体目录:
mkdir -p /usr/share/fonts/zh_CN/TrueType/
把字体文件拷贝到该目录,然后使字体文件生效:
cd /usr/share/fonts/zh_CN/TrueType/
mkfontscale
mkfontdir
fc-cache -f -v
由于是后台程序,没有DISPLAY输出,最初尝试了 xvfb-run,效果不好,只好启用桌面环境,需要设置一下权限:
sudo su -
export DISPLAY=:0.0
xhost +si:localuser:leo
:0.0是显示编号,leo是授予权限的系统帐号。
这样就可以在后台生成页面截图了,效果如附图,还算满意。 :)
青春就应该这样绽放 游戏测试:三国时期谁是你最好的兄弟!! 你不得不信的星座秘密