首页 > 编程语言 >小程序实现页面转图片

小程序实现页面转图片

时间:2023-06-30 16:25:04浏览次数:39  
标签:程序实现 puphpeteer 页面 puppeteer 生成 page 图片

要实现一个小程序页面转图片的需求,类似于用户编辑了一些内容,上传了一些头像,然后生成几十张图片,供用户下载转发及生成pdf等等,实验了以下方案:

1.wxml2canvas

微信提供的解决方案,写起来很麻烦,页面样式还有好多不支持,pass

2.webview+html2canvas

在小程序里通过webview打开一个外部页面,然后在外部页面使用html2canvas插件生成图片,这种方式操作简单,生成的图片效果也不错。然而有一个问题,用户没有打开编辑,而是系统自动生成的页面,类似于目录页,要怎么生成图片呢,于是转用第三种方案

3.小程序发送请求到后端接口,后端通过puphpeteer直接打开页面并生成图片。

puphpeteer是一个Puppeteer与PHP的桥接,支持完整的API,常用来做爬虫,这个库和pyppeteer的区别是他是通过php来连接puppeteer,也就是依然需要node.js和puppeteer环境,而python版本的pyppeteer是纯python重写的,本身并不需要安装node.js。

composer require nesk/puphpeteer
npm install @nesk/puphpeteer

安装成功后

require_once('vendor/autoload.php');
use Nesk\Puphpeteer\Puppeteer;
$puppeteer = new Puppeteer();
$browser = $puppeteer->launch();
$page = $browser->newPage();
$page->setViewport(['width' => 1200, 'height' => 2133,'deviceScaleFactor' => 2]);
$page->goto('http://www.baidu.com');
$page->screenshot(['path' => 'example.png']); 
$browser->close();

setViewport可以设置截图宽高和清晰度 

在实际使用过程中,可能由于使用各种echart图表或者延迟渲染,导致生成出来的图片空白,可以使用

$page->waitForSelector('#title');

或者

$page->waitFor(1000);

等到页面渲染完成后再进行截图操作

标签:程序实现,puphpeteer,页面,puppeteer,生成,page,图片
From: https://www.cnblogs.com/suzumiyahr/p/17517094.html

相关文章

  • LCD12864单色屏任意位置显示文字图片功能,不在受限于8bit的分行
    /*取模软件image2Lcdv2.9液晶取模方式:扫描方式:数据水平,字节垂直输出灰度:单色最大宽度和高度:128*64字节内像素数据反序*/#defineLCD_REVERSE_FLAG0#defineLCD_DISPLAY_NORMAL0#defineLCD_DISPLAY_REVERSE1#defineLCD_BUFF_BYTE_MAX1024#defineSCREEN_WIDT......
  • Vue3 reactive 操作数组 响应性(数组变了,但页面显示没变)问题
    问题代码:tableTemplates:Array<HkTaskTemplateEntity>=reactive([]);//删除方法的一部分,根据templateId删除数组数据this.tableTemplates=this.tableTemplates.filter(item=>templateId!==item.templateId);删除后tableTemplates数组中对象减少,但vue页面显示数据......
  • AI生成图片检测器接口,广泛应用于内容审核、虚拟现实应用和促进艺术及设计领域创新等场
     【检测率99.0%以上】可以快速准确地判断一张图片是否为AI生成,减少人工审核的工作量,提高工作效率、降低运营成本,帮助人们更好地管理和利用数字图像资源。广泛应用于内容审核、虚拟现实应用和促进艺术及设计领域创新等场景。效果展示美东时间2022年4月5日,上午10时整刚过,ai生成......
  • 图片轮播图
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><scriptsrc="node_modules/jquery/dist/jquery.js"></script><title>切换图片</title><style>*{......
  • 登录页面
    <!DOCTYPEhtml><html><head><title>Register</title><style>body{font-family:Arial,sans-serif;background-color:#f4f4f4;}.container{max-width:400px;......
  • 餐厅页面
    <!doctypehtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,user-scalable=no,initial-scale=1.0,maximum-scale=1.0,minimum-sc......
  • 一个sqlite的例子,将图片存入sqlite数据库
          最近学习sqlite,在看了一些资料后,写了一个例子,可能对初学sqlite或者学习将图片插入数据库等的有用,把源码发出来,给需要参考的。也欢迎大家提出建议。         包含常用的sql操作,增删改查,同时也在例子中说明,sqlit的sql语句使用参数,可以用@也可以用$。     ......
  • 关于HTML页以Get方法向asp.net页面传值乱码的解决
    这个问题是最近偶然发现的,朋友说我个人做那个基于Lucene的搜索引擎,存在一个问题,就是只能搜索英文,不能搜索中文。我把代码仔细看了一下,没发现问题,但是在测试的时候确实存在这样的问题。我查看传值之后的参数,全部是乱码或者空格,立即觉得是传递过程中编码的问题。后来在web.config中添......
  • [GPT] vue 的 quasar 框架 在 layout 模版中 如何获取 子页面当前使用的 useMeta
     在Quasar框架中,用VueRouter的meta字段来获取子页面当前使用的useMeta。首先,您需要在路由配置中设置子页面的meta字段。例如:  constroutes=[{path:'/page',component:PageComponent,meta:{useMeta:{//在这里定义您......
  • 注册功能 ,前端登录注册页面
    目录1异步发送短信1.1视图类1.2序列化类加入万能验证码2注册功能3.1视图类3.2序列化类补充3前端注册页面分析3.1Header.vue3.2Login.vue4前端登录注册页面复制4.1Login.vue4.2Register.vue4.3Header.vue5前端登录功能6前端注册功能1异步发送短信#原来的发送短......