uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册

这篇具有很好参考价值的文章主要介绍了uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言

我使用到painter的原因是,在uniapp开发微信小程序时,需要将一个页面的内容转换成图片保存到本地相册。
起初在网上找到很多都是在uniapp中使用 html2canvas 网页转换成图片再jspdf将图片转换为pdf,但是这种方式在小程序环境不支持,只在h5环境下适用,当然这个方式是可行的,可以使用webviewh5将页面嵌入到微信小程序中,可我这个整体模块已经在微信小程序实现了,时间上也不允许我重新再用h5开发,所以就使用painter方式,将微信小程序页面转换成图片。

一、painter是什么

painter是一款微信小程序插件

painter github 镜像网址:https://gitcode.net/mirrors/Kujiale-Mobile/Painter?utm_source=csdn_github_accelerator#
下图是官网自己对painter的介绍。
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序

二、painter的应用场景

1.社交分享:开发者可以把用户的个人信息、活动页面等转换为图片,用户可以将这些图片保存到本地后分享到朋友圈,QQ空间等社交平台。

2.电商推广:电商平台可以把当前商品详情页转成图片,提供给用户分享到社交平台上,实现商品推广。

3.数据可视化:某些需要展现大量数据,或者复杂数据的场景,可以将数据以图表的形式展示出来,然后使用painter将这些数据图表转换为图片,提供给用户下载使用。

4.截图保存:例如问答、短篇小说、教程等类型的小程序,可一键截图保存整页内容。

5.生成个性化海报:如把用户的昵称,头像,成就等生成一张个性化的海报提供给用户保存,增强用户体验。

三、uniapp中自定义组件引用painter

uniapp中引用小程序自定义组件的方式
上面链接是官方教程如何在uniapp中引入自定义组件,我这里简单记录一下在引入微信小程序的自定义组件painter的方式。

1. 下载painter

painter下载地址
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序

下载下来之后,找到compontents文件夹下的painter文件夹,这个就是我们要使用的painter组件。
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序

2. 在项目根目录新建wxcomponents 文件夹,将下载的painter文件夹拷贝到该目录中

┌─wxcomponents                  微信小程序自定义组件存放目录
│   └──painter                   微信小程序自定义组件
│		├─painter.js
│		├─painter.wxml
│		├─painter.json
│		└─lib
├─pages
│  └─index
│		└─index.vue
│
├─static
├─main.js
├─App.vue
├─manifest.json
└─pages.json

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序

3. 在 pages.json 对应页面的 style -> usingComponents 引入组件:

uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序

// #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-QQ
	"usingComponents": {
		"painter": "/wxcomponents/painter/painter"
	}
// #endif

4. 然后就可以在刚配置的页面中使用painter了

    <painter name="合同签订" :scaleRatio="2" :palette="palette" @imgOK="imgOK"
      customStyle="position:fixed;top:-9999rpx"></painter>

四、painter的基本用法

这是官网的介绍:
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序
下面是我使用时用的一个简单的demo
生成的图片效果如下:
uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册,uni-app,uni-app,微信小程序,小程序
代码如下

  • template
<painter name="合同签订" :scaleRatio="2" :palette="palette" @imgOK="imgOK" style="position:fixed;top:-9999rpx"></painter>
<button @tap="saveImg">保存</button>
  • data
      imgSrc: '',

      painterStyle: {
        rect: {
          width: '710rpx',
          left: '20rpx',
          color: '#fff',
          borderRadius: '16rpx'
        },
        textLeft: {
          left: '40rpx',
          fontSize: '28rpx',
          color: '#111'
        },
        textRight: {
          right: '40rpx',
          fontSize: '28rpx',
          color: '#111'
        },
        textLeftTwo: {
          left: '180rpx',
          fontSize: '28rpx',
          color: '#111'
        },
        title: {
          textAlign: 'center',
          fontSize: '36rpx',
          color: '#000',
          width: '100%'
        },
        line: {
          left: '40rpx',
          width: '670rpx',
          height: '1px',
          color: '#eee'
        }
      }

  • computed
    // 这里是图片内容的具体实现
    palette() {
      const palette = {
        width: '750rpx',
        height: '1200rpx',
        background: '#f7f7f7',
        views: []
      }

      const startTop = 600 // 开始的 top 值
      const gapSize = 50 // 间隙大小

      // css 使用数组形式抽离相同样式
      const arr1 = [
        {
          type: 'rect', // 背景
          css: [{ height: '500rpx' }, this.painterStyle.rect]
        },
        {
          type: 'rect', // 分割线
          css: [{ top: '100rpx' }, this.painterStyle.line]
        },
        {
          type: 'rect', // 分割线
          css: [{ top: '200rpx' }, this.painterStyle.line]
        }
      ]

      // 文字
      const arr2 = [
        {
          type: 'text',
          text: '民用天然气供用气合同',
          css: [{ top: `${startTop}rpx`, }, this.painterStyle.title]
        },
        {
          type: 'text',
          text: '用户编号:',
          css: [{ top: `${startTop + 2 * gapSize}rpx`,}, this.painterStyle.textLeft]
        },
        {
          type: 'text',
          text: '002',
          css: [
            {
              top: `${startTop + 2 * gapSize}rpx`,
            },
            this.painterStyle.textLeftTwo
          ]
        },
        {
          type: 'text',
          text: '合同编号:',
          css: [{ top: `${startTop + 3 * gapSize}rpx`,}, this.painterStyle.textLeft]
        },
        {
          type: 'text',
          text: '123456',
          css: [
            {
              top: `${startTop + 3 * gapSize}rpx`,
            },
            this.painterStyle.textLeftTwo
          ]
        },
      ]

      palette.views = palette.views.concat(arr1, arr2)

      // 如果图片没有显示出来,可以把它放到 views 的末尾
      palette.views.push(
        {
          type: 'image',
          url: 'https://qhyxpicoss.kujiale.com/r/2017/12/04/L3D123I45VHNYULVSAEYCV3P3X6888_3200x2400.jpg@!70q',
          css: {
            top: '48rpx',
            right: '48rpx',
            width: '192rpx',
            height: '192rpx',
          },
        }
      )

      return palette
    },
  • methods
    // 图片生成成功,可以从 e.detail.path 获取生成的图片路径
   imgOK(e) {
     console.log('e', e)
     this.imgSrc = e.detail.path
     console.log('imgSrc', this.imgSrc) // 点击打印出来的内容就可以看见图片了
   },

   // 保存图片
   saveImg() {
     //用户授权并开启保存到相册的权限
     uni.authorize({
       scope: 'scope.writePhotosAlbum',
       success: (result) => {
         if (!this.imgSrc) {
           return uni.showToast({
             title: '图片生成中,请稍等~',
             icon: 'none'
           })
         }
         // 保存到手机相册
         uni.saveImageToPhotosAlbum({
           filePath: this.imgSrc,
           success: function (e) {
             console.log('保存成功', e)
             uni.showToast({
               title: '保存成功',
               icon: 'none'
             })
           }
         })
       },
       fail: (error) => {
         uni.showModal({
           title: '提示',
           content: '检测到您有未开启的权限,为保证功能正常使用,请保持保存到相册权限均为开启状态',
           confirmText: '去开启',
           success: ({ confirm }) => {
             if (confirm) uni.openSetting()
           }
         })
       }
     })
   },

这只是最基础的用法,更多需求可参考官网。

总结

好啦,以上就是如何在UniApp开发环境中使用Painter插件将微信小程序页面转换为图片并保存至本地相册。首先,我们描述了安装和配置Painter的详细步骤,包括如何在项目中引入Painter以及编写Painter绘图的JSON数据。然后,我们重点介绍了如何使用PainterCanvas上绘制出需要的图片,包括文字,图片,矩形等元素,并详细解说了如何具体控制这些元素的绘制位置,大小和样式。最后,我们介绍了怎样通过微信小程序的API,将这个绘制出来的Canvas图片保存到用户的本地相册中。希望看到这里的小伙伴,这篇记录对你有所帮助文章来源地址https://www.toymoban.com/news/detail-652326.html

到了这里,关于uniapp开发微信小程序使用painter将页面转换为图片并保存到本地相册的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • uniapp使用webview将页面转换成图片支持h5、app、小程序

    uniapp使用webview将页面转换成图片支持h5、app、小程序

    在uniapp项目中新建主页和webview页面 index.vue代码 webview代码 实现效果

    2024年02月05日
    浏览(40)
  • uniapp开发微信小程序问题笔记-页面跳转传参

    uniapp开发微信小程序问题笔记-页面跳转传参

    页面跳转传参,一般都是字符串类型,传bool类型也会被当做字符串处理 举例:点击页面跳转并传参,跳转页面从onLoad中的option接收参数 isgas 父子组件的数据交互 在之前的博客里简单介绍过父子通信方法:父传子props,子传父$emit 这里再补充一个父调用子组件的方法 $refs 子组件

    2024年02月11日
    浏览(9)
  • 微信小程序海报插件Painter 2.0(canvas画图)使用并保存图片到相册案例

    Painter通过 json 数据形式,来进行动态渲染并绘制出图片。 Painter 的优势 功能全,支持文本、图片、矩形、qrcode 类型的 view 绘制 布局全,支持多种布局方式,如 align(对齐方式)、rotate(旋转) 支持圆角,其中图片,矩形,和整个画布支持 borderRadius 来设置圆角 支持边框,

    2024年01月20日
    浏览(45)
  • uniapp+vue开发微信小程序,image标签图片IOS可以正常回显,安卓回显不出

    仅代表个人遇到的问题,仅代表个人遇到的问题,仅代表个人遇到的问题, 2.我这边的原因是因为服务器部署在腾讯云上,小程序安卓手机会触发防盗链机制,导致无法正常访问到图片 3.正规解决办法:在服务器配置中的防盗链配置referer白名单,添加servicewechat.com, 4.隐患,

    2024年01月25日
    浏览(18)
  • uniapp开发微信小程序使用高德地图

    uniapp  官方文档 地图组件控制  地图组件 高德地图key需要公司去申请,之后自己在下载高德地图微信小程序插件 下好的js文件放在项目中,之后在vue项目中的main.js文件中全局注入 页面引入并使用

    2024年02月15日
    浏览(42)
  • 开发微信小程序使用原生开发还是uniapp开发

    开发微信小程序使用原生开发还是uniapp开发

    大家好,我是蔓云科技的小蔓(写代码的平面师)。 今天给大家带来一门知识普及课,开发小程序使用原生还是uniapp,如果你想开发一款小程序,通过这个视频你会得到答案。 相信大家对小程序都不陌生吧,在生活的方方面面中都有它的身影,比如:社区团购、商城购物、

    2024年02月17日
    浏览(37)
  • 使用uniapp开发微信小程序的微信支付流程

    在我们做一些购物车的结算功能时是一定会有支付功能的,那我们如何去做微信支付这个功能呢,首先我们先要理清思路,并且要了解到接口需要哪些数据以及会返回哪些数据 注意:一定要先看接口文档! 创建订单。 ○ 请求创建订单的 API 接口:把(订单金额、收货地址、

    2024年02月09日
    浏览(39)
  • 使用uniapp开发微信小程序的人脸采集功能/人脸识别功能

    使用uniapp开发微信小程序的人脸采集功能/人脸识别功能

    ✅作者简介:大家好我是瓜子三百克,励志成为全栈工程师的一枚程序猿,也是喜欢在学习和开发中记录笔记的小白博主! 📃个人主页:瓜子三百克的主页 🔥系列专栏:uniapp前端 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞 本篇文章

    2024年02月11日
    浏览(41)
  • uniapp开发微信小程序使用base64进行加密解密

    涉及场景:uniapp开发微信小程序需要使用base64进行加解密。 涉及依赖包:base-64,utf8 涉及到问题描述:首先尝试引入js-base64这个包,经过尝试后发现无法使用,为什么无法使用不晓得,没研究出来。再搜索中找到一篇关于《uniapp使用base64》的文章,文章中使用base64这个包,经

    2024年02月16日
    浏览(49)
  • uniapp 开发微信小程序使用TCP/UDP通信以16进制发送数据

    uniapp 开发微信小程序使用TCP/UDP通信以16进制发送数据

    在微信小程序中实现像网络调试工具按16进制发送的功能。 如下图调试工具接收到微信小程序发送的16进制数据 以上代码是在 uniapp 开发工具进行编写,然后编译 运行到小程序模拟器才能正常使用。如果直接用微信开发者工具编译,会报错: ReferenceError: Buffer is not defined 源码

    2024年02月15日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包