关于使用wkhtmltoimage工具将html转为图片后,作成的图片与浏览器渲染出来的样子不一致的问题

我在使用wkhtmltoimage工具时,发现使用同样的HTML生成的图片的渲染和浏览器上渲染出来的效果不一样

这是使用浏览器渲染出来的样子


这是使用wkhtmltoimage工具作成的图片

在我调查原因之后,发现HTML渲染出来的效果不一样是因为wkhtmltoimage工具和我使用的浏览器引擎是不一样的,wkhtmltoimage用来呈现Html内容的引擎是(WebKit),而我使用的浏览器用来呈现Html内容的引擎是(Blink),而尽管 WebKit 和 Blink 都有一些 Web 标准,但它们是两个不同的渲染引擎,可能在处理某些 HTML 和 CSS 特性上有一些不同。

所以在这里我使用的解决方法是放弃使用wkhtmltoimage来将Html转为图片,使用其他的工具,这里我换的工具是puppeteer,puppeteer工具使用的引擎是Blink引擎,这和我使用的浏览器用来呈现Html内容的引擎一致,所以我尝试更换工具来作成图片。

这是我更换工具后使用相同的HTML结构做出的图片


接下来我会整理出来如何安装puppeteer工具,并使用它

1.安装nodejs和npm

Puppeteer是一个 Node.js 库,因此Puppeteer需要依赖于nodejs

首先执行安装nodejs

apt-get install nodejs

安装npm

apt-get install npm

安装完成之后执行nodejs -v和npm -v,确认是否安装成功


使用npm安装Puppeteer工具

npm install puppeteer

安装wget,因为需要使用wget在系统内安装google浏览器,puppeteer 是一个基于 Chrome的工具,用于控制、操纵和测试浏览器。

apt-get install wget

安装gnupg,它是一个用于提供加密和签名的开源工具套件,当添加新的软件源时,系统通常要求通过签名来验证软件包的真实性,所以需要gnupg确保下载并安装的软件包是由正确的发布方签名的。

apt-get install gnupg

安装google套件

wget -q -O -https://dl-ssl.google.com/linux/linux_signing_key.pub| apt-key add - \

&& sh -c 'echo "deb [arch=amd64]http://dl.google.com/linux/chrome/deb/stable main" >> /etc/apt/sources.list.d/google.list' \

&& apt-get update && apt-get install -y google-chrome-stable

其中,https://dl-ssl.google.com/linux/linux_signing_key.pub是Google Chrome 的签名密钥文件,用于验证下载软件包的完整性和真实性。

http://dl.google.com/linux/chrome/deb/是Google Chrome 的 Debian 软件包的存储库地址,包含了 Google Chrome 的二进制软件包,软件包存储库地址则指定了软件包的位置。

当执行了以上命令,在执行apt-get install -y google-chrome-stable命令后就会从http://dl.google.com/linux/chrome/deb/下下载并安装google浏览器。

到这里配置方面的工作就完成了,接下来我来介绍如何使用这个工具

在这里我使用了browsershot库

https://github.com/spatie/browsershot

安装browsershot

composer require spatie/browsershot

在代码中引入

use Spatie\Browsershot\Browsershot;

使用Browsershot库将HTML转为图片

Browsershot::html($dom)->setOption('args', ['--disable-setuid-sandbox','--font-render-hinting=medium'])->setScreenshotType('jpeg')->setNodeBinary(env('NODE_PATH', '/usr/bin/node'))->setNpmBinary(env('NPM_PATH', '/usr/bin/npm'))->setChromePath(env('CHROME_PATH', '/usr/bin/google-chrome-stable'))->windowSize(2500, 843)->delay(2000)->quality(80)->save($path);

在这里我解释一下以上代码的作用

Browsershot::html($dom)表示使用HTML结构来生成图片,$dom为HTML变量

->setOption('args', ['--disable-setuid-sandbox','--font-render-hinting=medium'])  这其中‘--disable-setuid-sandbox’是为了禁用google浏览器的沙箱模式,Chrome 的沙箱是为了提高安全性而设计的,但在容器中运行时,可能会导致权限问题,所以我们可以通过禁用沙箱,可以绕过这些问题。‘--font-render-hinting=medium’为了设置字体呈现的提示级别为中等。这个参数用于控制字体的渲染方式。

->setScreenshotType('jpeg')  设置截图的类型为 JPEG 格式。

->setNodeBinary(env('NODE_PATH', '/usr/bin/node'))  设置Node.js路径

->setNpmBinary(env('NPM_PATH', '/usr/bin/npm'))  设置npm路径

->setChromePath(env('CHROME_PATH', '/usr/bin/google-chrome-stable'))  设置Chrome 浏览器的二进制文件路径。

->windowSize(2500, 843)  设置截图的像素宽高比例。

->delay(2000)  表示在生成图片时延迟两秒的时间,因为我在渲染HTML时使用了部分字体文件,这部分字体文件较大所以渲染慢,在这里我在生成截图时延迟两秒,避免在字体还未渲染完成就生成图片。

->quality(80)  设置JPEG 图片的质量。

->save($path)  将最终的截图保存到指定路径。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容