V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frozenway
V2EX  ›  PHP

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

  •  
  •   frozenway · 2020-10-23 15:35:12 +08:00 · 2850 次点击
    这是一个创建于 1252 天前的主题,其中的信息可能已经有所发展或是发生改变。
    14 条回复    2020-10-28 14:36:29 +08:00
    hadeswang
        1
    hadeswang  
       2020-10-23 15:45:03 +08:00   ❤️ 1
    PhantomJS
    imdong
        2
    imdong  
       2020-10-23 15:45:28 +08:00   ❤️ 1
    客户端实现?
    -> 自己控制范围内的网页:除非在客户端安装插件,否则我能想到的就是 `javascript:window.print();`
    -> 不在自己控制范围内的网页:除非在客户端安装插件,否则理论上无法实现。

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

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

    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
        10
    z5864703  
       2020-10-23 16:41:28 +08:00   ❤️ 1
    为啥不通过前端来完成呢?调用浏览器 api 截图上传到服务器,也可以做到用户无感
    frozenway
        11
    frozenway  
    OP
       2020-10-23 16:59:59 +08:00
    @wh1012023498 太感谢了
    OldActorsSmile
        12
    OldActorsSmile  
       2020-10-23 20:40:38 +08:00   ❤️ 1
    应该是需要一个模拟浏览器去渲染,这个跟 php 关系不大,是 php 通过命令去调用渲染的插件,这种 windows 和 linux 应该都有,我之前看到过,因为没做这种功能,细节忘了
    yuancoder
        13
    yuancoder  
       2020-10-27 15:58:22 +08:00   ❤️ 1
    如果有图表之类的,使用 wkhtmltoimage
    xiaociwei
        14
    xiaociwei  
       2020-10-28 14:36:29 +08:00   ❤️ 1
    htmltocanvas 可以把简单的页面生成 canvas 图片
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3558 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 04:55 · PVG 12:55 · LAX 21:55 · JFK 00:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.