自己写了一个截取网页的 Composer 包,欢迎使用

screenshot

网页截图服务,用于生成小程序海报。(mac系统暂未适配)

安装

composer require tommy-dai/screenshot

使用

快速上手

$screenshot = new \Screenshot\ScreenShot();
$screenshot->shot('http://image.baidu.com');

注意:第一次访问图片有可能不出来,后面就不会出现了

不出意外就可以获得百度图片的网页截图

可选配置项

//截图服务端口号
port = 8181;

//超时时间(毫秒)
timeOut = 5000;

//是否解析页面中的JavaScript代码
javascriptEnabled = false;

//图片宽度(单位像素)
width = 750;

//图片高度(单位像素)
height = 1334;

//截图日志文件存放路径(绝对路径)
logPath = '';

修改默认配置项

//获取默认配置
$config = new \Screenshot\Config();

//修改默认端口号(修改配置)
$config->setPort(8080);

//修改默认端图片宽度
$config->setWidth(600);

//修改默认端图片高度
$config->setHeight(800);

//开启JavaScript支持(开启后将可以解析页面中js代码,对于js生成的页面可以截取)
$config->setJavascriptEnabled(true);

//用配置文件初始化截图服务(不传$config会走默认配置)
$screenshot = new \Screenshot\ScreenShot($config);

//生成截图服务并截取百度图片
$screenshot->shot('http://image.baidu.com');

注意:修改配置项不会立即生效,关闭服务重新开启后生效。

关闭步骤

  • 改为下面代码然后通过浏览器访问一次,服务就会关闭。重新访问上面的代码就生效了。
$screenshot = new \Screenshot\ScreenShot();

//关闭截图服务
$screenshot->stop();

获取截图base64字符串

$screenshot = new \Screenshot\ScreenShot();

//返回base64的图片,可用于本地保存
$screenshot->getShot();

特殊用法

$screenshot = new \Screenshot\ScreenShot();

//开启截图服务
$screenshot->start();

开启截图服务 $screenshot->start() 之后能干什么

1. 可以通过访问 127.0.0.1:8181/?a=image.baid... 获取截图的 base64 字符串
2. 可以把截图服务单独部署,通过访问 http://ip地址:8181/?a=http://image.baidu.com 获取截图的 base64 字符串
3. 可以部署多台截图服务用nginx做负载均衡

更多疑问请提 issues

本帖已被设为精华帖!
本帖由系统于 3个月前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 11

支持 模拟手机截图吗? 设置宽度

4个月前 评论
daijunooo (楼主) 4个月前
zhanghaidi 2个月前

这是全页面是吗?这个可以啊再扩展一下可以用来保存一些网页数据。 :speak_no_evil:

4个月前 评论

请问这是什么原理啊? 为什么可以把html变成图片。。用了html2canvas?

4个月前 评论
daijunooo (楼主) 4个月前
php炎黄

phantomjs不是不维护了吗

3个月前 评论
daijunooo (楼主) 3个月前
GeorgeKing 2个月前
fatrbaby

不错哦。不过建议用symfony的symfony/process包代替原生的exec函数,以提高容错性。

3个月前 评论
daijunooo (楼主) 3个月前

设置了

$config->setJavascriptEnabled(true);

获取图标数据,js没有渲染,是我哪里的姿势不对吗?

www.jq22.com/demo/jqueryEcharts2020...

file

$config = new \Screenshot\Config();

//修改默认端口号(修改配置)
$config->setPort(8181);

//修改默认端图片宽度
$config->setWidth(1080);

//修改默认端图片高度
$config->setHeight(800);

//开启JavaScript支持(开启后将可以解析页面中js代码,对于js生成的页面可以截取)
$config->setJavascriptEnabled(true);

//用配置文件初始化截图服务(不传$config会走默认配置)
$screenshot = new \Screenshot\ScreenShot($config);

$screenshot->start();
2个月前 评论
daijunooo (楼主) 2个月前
daijunooo (楼主) 2个月前
liaosp (作者) 2个月前

没太明白:joy:,这个可以获取网页的截图,怎么生成小程序的海报呢?

2个月前 评论
liaosp 2个月前
daijunooo (楼主) 2个月前
沈益飞

github.com/nesk/puphpeteer

我们项目用了这个,小程序海报就是用这个实现的。

2个月前 评论
daijunooo (楼主) 2个月前

生成的截图保存在哪里呢

2个月前 评论
liaosp 2个月前

作者在吗? 能不能将 shot 函数改为 return 返回呢,返回 base64 图片可以直接 echo 渲染,也可以保存到本地。@daijunooo

2个月前 评论
daijunooo (楼主) 2个月前
daijunooo (楼主) 2个月前
TELstatic (作者) 2个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!