? 介绍在桌面操作系统下,手工截取网页的截图非常方便,各种软件插件一应俱全。但是作为一个程序员,有时你也许有这样的需求:服务器端的程序自动对指定的页面进行截图并保存。对于服务器端纯命令模式下如何截图呢?...
? 介绍
在桌面操作系统下,手工截取网页的截图非常方便,各种软件插件一应俱全。但是作为一个程序员,有时你也许有这样的需求:服务器端的程序自动对指定的页面进行截图并保存。对于服务器端纯命令模式下如何截图呢?
这里介绍一个非常好用的软件: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
基础教程推荐
- JS实现左侧菜单工具栏 2022-08-31
- 纯vue3实现的svg可视化web组态编辑器。主要用于物联网mqtt实时系统图 2023-10-08
- 关于 css:仅在 IE7 和 IE8 中不以链接或悬停状态显 2022-09-21
- 一文了解JavaScript闭包函数 2023-08-12
- 详解浏览器的缓存机制 2022-11-13
- ajax调用中ie缓存问题解决方法 2022-10-18
- JavaScript defineProperty如何实现属性劫持 2023-08-08
- mint-ui如何自定义messageBox样式 2023-07-10
- ajax响应json字符串和json数组的实例(详解) 2023-01-31
- 基于HTML5+CSS3实现简单的时钟效果 2022-09-16