跳到主要内容

使用cutycapt将网页转为图片

· 阅读需 3 分钟

有时需要在程序里将网页转为图片。虽然使用Chrome或Firefox的headless模式可以做到(不过有时也未必可以),但是,它们比较占用资源。这时,可以用cutycapt这个命令行小工具,它基于QT,非常小巧。

安装

在Ubuntu上安装比较简单,直接安装即可:

$ sudo apt install cutycapt

在ArchLinux上,它位于AUR上,名字叫cutycapt-qt5-git,安装:

$ yay cutycapt-qt5-git

注意,在ArchLinux上它的启动命令行是CutyCapt

cutycapt

基本使用比较简单:--url指定网站,如果是本地HTML文件,使用 file:// 地址即可。--out指定输出文件,支持.png, .pdf, .ps, .svg, .jpg。

$ cutycapt --url=https://muranxuan.top --out=jlice.png

不过,如果没有图形环境的话,会报错:

cutycapt: cannot connect to X server

cutycapt截图时可以指定浏览器最小宽高:

$ cutycapt --url=https://muranxuan.top/ --out=jlice.png --min-width=1024 --min-height=768

xvfb

由于完整的X环境比较耗费资源,这时我们可以选择安装一个“空壳版”X服务xvfb,它可以在一个虚拟X服务环境中运行命令。

$ sudo apt install xvfb

然后,就可以利用xvfb-run运行cutycapt来进行截图:

$ xvfb-run --server-args="-screen 0, 1920x1080x24" cutycapt --url=https://muranxuan.top/ --out=jlice.png

其中,.screen指定屏幕编号。该命令会启动X服务,然后运行命令,最后关闭X服务。

但是,可能会有中文字体显示为方框的问题,这是因为没有中文字体。安装一个中文字体即可,例如ttf-wqy-microhei:

$ sudo apt install ttf-wqy-microhei

如果想保持X服务,可以运行(注意Xvfb的X要大写):

$ sudo Xvfb :10 -ac &

10为显示器编号,随便指定一个就行,默认是0。-ac是禁用Xvfb的访问控制限制

然后设置环境变量DISPLAY(显示器编号和上面的数字一致):

export DISPLAY=:10

然后就可以运行需要X服务的程序了。不过,由于我们的X服务是个空壳,所以程序仍然是没有界面的。