PHP 怎么把网页内容生成图片?我想把用户访问特定页面时的网页做个类似快照一样的东西,把此时的网页显示内容生成一个图片 jpg,png,gif 不限,保存起来。请问有这方面的 PHP 程序或插件吗?或者有什么思路去实现?

2020-10-23 15:35:12 +08:00
 frozenway
2908 次点击
所在节点    PHP
14 条回复
hadeswang
2020-10-23 15:45:03 +08:00
PhantomJS
imdong
2020-10-23 15:45:28 +08:00
客户端实现?
-> 自己控制范围内的网页:除非在客户端安装插件,否则我能想到的就是 `javascript:window.print();`
-> 不在自己控制范围内的网页:除非在客户端安装插件,否则理论上无法实现。

服务端实现?
-> 有一个工具“Puppeteer”?之类的无头浏览器,可以实现服务端截图,但是因浏览器兼容性等差异,与客户端看到的可能不完全一样。

综上,和 PHP 实现本身没多大关系,或者说单靠 PHP 本身无法实现。
Evilk
2020-10-23 16:02:05 +08:00
是不是,类似,点击一下,将页面生成一张图片?,并保存起来?
wispx
2020-10-23 16:07:11 +08:00
可以使用 domtoimage 将 dom 元素转换成图片
github: https://github.com/tsayen/dom-to-image
frozenway
2020-10-23 16:10:13 +08:00
@imdong 是在服务端实现,在网页视图传送到浏览器前
@Evilk 不是点击,是只要客户点击了访问了链接,程序自动把访问的这条连接的网页内容生产一个图片保存起来
KasonPasser
2020-10-23 16:22:37 +08:00
可以尝试一下 Dompdf ,把 html 存成 pdf .
Evilk
2020-10-23 16:23:11 +08:00
@frozenway 通过点击触发,或者,访问触发,都一样,你可能需要这个( http://html2canvas.hertzen.com)
frozenway
2020-10-23 16:29:51 +08:00
@Evilk 谢谢
wh1012023498
2020-10-23 16:38:24 +08:00
可参考

https://github.com/puppeteer/puppeteer

https://github.com/rialto-php/puphpeteer

use Nesk\Puphpeteer\Puppeteer;

$puppeteer = new Puppeteer;
$browser = $puppeteer->launch();

$page = $browser->newPage();
$page->goto('https://example.com');
$page->screenshot(['path' => 'example.png']);

$browser->close();
z5864703
2020-10-23 16:41:28 +08:00
为啥不通过前端来完成呢?调用浏览器 api 截图上传到服务器,也可以做到用户无感
frozenway
2020-10-23 16:59:59 +08:00
@wh1012023498 太感谢了
OldActorsSmile
2020-10-23 20:40:38 +08:00
应该是需要一个模拟浏览器去渲染,这个跟 php 关系不大,是 php 通过命令去调用渲染的插件,这种 windows 和 linux 应该都有,我之前看到过,因为没做这种功能,细节忘了
yuancoder
2020-10-27 15:58:22 +08:00
如果有图表之类的,使用 wkhtmltoimage
xiaociwei
2020-10-28 14:36:29 +08:00
htmltocanvas 可以把简单的页面生成 canvas 图片

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/717878

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX