PHP 怎么把网页内容生成图片?我想把用户访问特定页面时的网页做个类似快照一样的东西,把此时的网页显示内容生成一个图片 jpg,png,gif 不限,保存起来。请问有这方面的 PHP 程序或插件吗?或者有什么思路去实现? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frozenway
V2EX    PHP

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

  •  
  •   frozenway 2020-10-23 15:35:12 +08:00 3521 次点击
    这是一个创建于 1821 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    是不是,类似,点击一下,将页面生成一张图片?,并保存起来?
    4DAX07B8Kle4Dm6T
        4
    4DAX07B8Kle4Dm6T  
       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     Solana     1287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:20 PVG 01:20 LAX 10:20 JFK 13:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86