使用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服务是个空壳,所以程序仍然是没有界面的。