编程获取网页截图

想要通过程序获取网页截图,由于是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是授予权限的系统帐号。

这样就可以在后台生成页面截图了,效果如附图,还算满意。 :)



编程获取网页截图_第1张图片


  青春就应该这样绽放   游戏测试:三国时期谁是你最好的兄弟!!   你不得不信的星座秘密

你可能感兴趣的:(编程,网页,截图)