自己写了一个截取网页的 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

本帖已被设为精华帖!
本帖由系统于 4年前 自动加精
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 29

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

4年前 评论
daijunooo (楼主) 4年前
zhanghaidi 3年前

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

4年前 评论

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

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

phantomjs不是不维护了吗

4年前 评论
daijunooo (楼主) 4年前
GeorgeKing 3年前
fatrbaby

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

4年前 评论
daijunooo (楼主) 4年前
bennyqqt 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();
3年前 评论
daijunooo (楼主) 3年前
daijunooo (楼主) 3年前
liaosp (作者) 3年前

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

3年前 评论
liaosp 3年前
daijunooo (楼主) 3年前
宇宙最厉害

github.com/nesk/puphpeteer

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

3年前 评论
daijunooo (楼主) 3年前

生成的截图保存在哪里呢

3年前 评论
liaosp 3年前

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

3年前 评论
daijunooo (楼主) 3年前
daijunooo (楼主) 3年前
未定义 (作者) 3年前

这种跟我自己生成海报片不是一样的吗

8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!