Linux 之 HTML 页面转图片软件:wkhtmltox

? 介绍在桌面操作系统下,手工截取网页的截图非常方便,各种软件插件一应俱全。但是作为一个程序员,有时你也许有这样的需求:服务器端的程序自动对指定的页面进行截图并保存。对于服务器端纯命令模式下如何截图呢?...

? 介绍

在桌面操作系统下,手工截取网页的截图非常方便,各种软件插件一应俱全。但是作为一个程序员,有时你也许有这样的需求:服务器端的程序自动对指定的页面进行截图并保存。对于服务器端纯命令模式下如何截图呢?

这里介绍一个非常好用的软件:wkhtmltox(官网 https://wkhtmltopdf.org),它不仅能把 HTML 网页转成图片,也可以转成 PDF。但是这里我们只讲 wkhtmltox 中的下 HTML转图片 功能。

? 安装主程序

进入 https://wkhtmltopdf.org/downloads.html,根据自己的操作系统选择合适的版本并复制链接备用(我们这里选择 CentOS 7 版本)。

进入服务器,开始安装 wkhtmltox
$ cd /usr/local/src/
$ wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm

$ yum -y install libX11
$ yum -y install libXext
$ yum -y install fontconfig
$ yum -y install libXrender
$ yum -y install xorg-x11-fonts-Type1
$ yum -y install xorg-x11-fonts-75dpi.noarch

$ rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
安装完以后,你就可以直接使用 wkhtmltoimage 命令来接网页图片,例如:
$ wkhtmltoimage www.baidu.com baidu.jpg

上面的代码直接将 baidu 首页截图并保存到当前目录下,由于服务器纯命令模式下无法直接查看 baidu.jpg,你可以通过 FTP 或其他方式下载到本地后再查看

至此,通过查看 baidu.jpg 你会发现图片里很多地方没有文字,更准确的说是图片里没有中文字体。为了 wkhtmltox 能正常的显示中文,接下来我们就需要安装中文字体。

? 安装中文字体

CentOS 下的 wkhtmltox 由于缺少中文字体库,所以对于网页的中文字体就它无法显示并截图。为此我们需要在服务器上安装中文字体。

下载字体:
$ cd /usr/share/fonts/
$ wget https://dlc2.pconline.com.cn/filedown_50601_6620616/SCbKpBBU/yaheiFont_CHS.zip
$ unzip yaheiFont_CHS.zip -d msyh
建立字体缓存
$ mkfontscale
$ mkfontdir
$ fc-cache -fv

OK,完成后你再使用 wkhtmltoimage 命令就能截到含有中文字体的图片了。

? 安装 PHP 扩展(PHP 7+)

在用 PHP 来开发网站时,如果我们需要使用 wkhtmltox 功能时,我们就需要在 PHP 里面通过终端命令执行函数 exec() 来调用 wkhtmltox 的相关命令来进行截图,这样很不友好而且有很多潜在问题。

好在很多开发者已经想到这些问题,我们可以使用他们的源码让 wkhtmltox 以扩展的形式嵌入 php 中,这样就便于我们的使用。

注:以下的安装库以及一些代码基于 CentOS 7+ 操作系统和 PHP 7+ 版本。

安装 PHP 扩展库:
$ cd /usr/local/src

$ wget https://github.com/mreiferson/php-wkhtmltox/archive/master.zip
$ wget https://github.com/julego/php-wkhtmltox/archive/julego-php7.zip
$ mv julego-php7.zip php-wkhtmltox-julego-php7.zip
$ unzip php-wkhtmltox-julego-php7.zip

$ cd php-wkhtmltox-julego-php7
$ /usr/local/php/bin/phpize
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make

$ cp phpwkhtmltox.so /usr/local/php/ext/
编辑 PHP 配置文件,增加扩展:
extension=phpwkhtmltox.so
重启 PHP:
systemctl restart php-fpm.service
PHP 调用 wkhtmltox 代码
<?php
    wkhtmltox_convert('image', ['in'=>'http://www.baidu.com/','out'=>'baidu.jpg']);
?>

函数原型:wkhtmltox_convert($type, $globalsetting, $objectsetting)

函数说明:http://www.cs.au.dk/~jakobt/libwkhtmltox_0.10.0_doc/pagesettings.html

本文标题为:Linux 之 HTML 页面转图片软件:wkhtmltox

基础教程推荐