微信小程序海报插件Painter 2.0(canvas画图)使用并保存图片到相册案例

这篇具有很好参考价值的文章主要介绍了微信小程序海报插件Painter 2.0(canvas画图)使用并保存图片到相册案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、下载与引入

Painter通过 json 数据形式,来进行动态渲染并绘制出图片。
Painter 的优势

  • 功能全,支持文本、图片、矩形、qrcode 类型的 view 绘制
  • 布局全,支持多种布局方式,如 align(对齐方式)、rotate(旋转)
  • 支持圆角,其中图片,矩形,和整个画布支持 borderRadius 来设置圆角
  • 支持边框,同时支持 solid、dashed、dotted 三种类型
  • 支持渐变色,包括线性渐变与径向渐变。
  • 支持 box-shadow 和 text-shadow,统一使用 shadow 表示。
  • 支持文字背景、获取宽度、主动换行
  • 支持自定义字体
  • 支持图片 mode
  • 支持元素的相对定位方法
  • 杠杠的性能优化,我们对网络素材图片加载实现了一套 LRU 存储机制,不用重复下载素材图片。
  • 杠杠的容错,因为某些特殊情况会导致 Canvas 绘图不完整。我们对此加入了对结果图片进行检测机制,如果绘图出错会进行重绘。
  • 生成的图片支持分辨率调节
  • 支持使用拖动等操作动态编辑绘制内容

文件源码和文档地址:https://gitee.com/jackhunx/Painter

下载文件保存到components文件夹下

//在需要使用的页面json中引入
"usingComponents": {
    "painter":"/components/painter/painter"
}

二、使用

wxml

<!-- 海报弹框 -->
<van-popup show="{{isPosterShow}}" bind:close="closePosterFn" custom-style="background: none;">
    <view class="poster">
        <image bind:tap="saveImageFn" src="{{posterImageUrl}}" mode=""/>
        <text>点击图片,保存至手机相册</text>
    </view>
</van-popup>

<painter palette="{{posterData}}" bind:imgOK="onImageOK" />

js文章来源地址https://www.toymoban.com/news/detail-808264.html

var app = getApp();
Page({

    /**
     * 页面的初始数据
     */
    data: {
        isPosterShow: false,//海报弹框
        qrCodeUrl: "",//二维码图片路径
        posterData: {},//海报数据
        posterImageUrl: "",//海报图片
    },
    //绘制海报
    drawPosterFn(){
    	wx.showLoading({
            title: '生成中',
        })
        this.setData({
             posterData: {
                 background: '背景颜色或背景图片地址',
                 width: '1164rpx',
                 height: '1548rpx',
                 views: [
                     {
                         type: "text",
                         text: "文字内容",
                         css: {
                             top: "256rpx",
                             left: "82rpx",
                             width: "1000rpx",
                             fontSize: "72rpx",
                             color: "#0159BB",
                             maxLines: 2,
                             lineHeight: "108rpx",
                             textAlign: "center",
                             fontWeight: "bold"
                         }
                     },
                     {
                         type: 'image',
                         url: "二维码图片地址",
                         css: {
                             top: '680rpx',
                             left: '264rpx',
                             width: '640rpx',
                             height: '640rpx',
                         },
                     }
                 ],
             }
         })
    },
    //监听海报是否生成成功
    onImageOK(e){
        wx.hideLoading();
        this.setData({
            isPosterShow: true,
            posterImageUrl: e.detail.path
        })
    },
    //保存图片到本地
    saveImageFn(){
        let that = this
        wx.saveImageToPhotosAlbum({
            filePath: this.data.posterImageUrl,
            success(res) {
                wx.hideLoading()
                wx.showToast({
                    title: '保存成功',
                    icon: "success",
                    duration: 1000
                })
            },
            fail(err) {
                console.log(err)
                if(err.errMsg == "saveImageToPhotosAlbum:fail auth deny"){
                    wx.showModal({
                        content: '检测到您没有授权保存到相册权限,是否去设置打开?',
                        confirmText: "确认",
                        cancelText: "取消",
                        success: function(res) {
                            //点击“确认”时打开设置页面
                            if (res.confirm) {
                                wx.openSetting({
                                    success () {
                                        that.savePhoto();
                                    }
                                })
                            } else {
                                
                            }
                        }
                    });
                }else if(err.errMsg == "saveImageToPhotosAlbum:fail privacy permission is not authorized"){
					app.showMsg("没有同意用户隐私协议!");
                }else if(err.errMsg == "saveImageToPhotosAlbum:fail privacy permission is not authorized in gap"){
                    app.showMsg("保存失败!");
                }else{
                    app.showMsg(err.errMsg);
                }
            }
        })
    },
    //下载图片地址并保存到相册,提示保存成功
    savePhoto() {
        wx.saveImageToPhotosAlbum({
            filePath: this.data.posterImageUrl,
            success(res) {
                wx.hideLoading()
                wx.showToast({
                    title: '保存成功',
                    icon: "success",
                    duration: 1000
                })
            },
            fail() {
                wx.showToast({
                    title: '保存失败',
                    icon: "error",
                    duration: 1000
                })
            }
        })
    },
    //关闭海报弹框
    closePosterFn(){
        this.setData({
            isPosterShow: false
        })
    },
    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        this.drawPosterFn()
    },
})

到了这里,关于微信小程序海报插件Painter 2.0(canvas画图)使用并保存图片到相册案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp微信小程序开发,生成海报插件painter的使用

    下载地址:https://github.com/Kujiale-Mobile/Painter 代码下载后,将component中的painter文件夹放入项目wxcomponents文件夹中(如果没有该文件夹,就在项目根目录中创建一个)    在pages.json中引入painter插件    同时也需要在页面中引入   使用React App来可视化编辑海报的模板代码:https

    2024年02月08日
    浏览(54)
  • 微信小程序使用canvas生成分享海报功能复盘

    近期需要开发一个微信小程序生成海报分享的功能。在h5一般都会直接采用 html2canvas 或者 dom2image 之类的库直接处理。但是由于小程序不具备传统意义的dom元素,所以也没有办法采用此类工具。 所以就只能一笔一笔的用 canvas 画出来了,下面对实现这个功能中遇到的问题做一

    2024年02月16日
    浏览(42)
  • 微信小程序使用canvas绘制海报并保存本地相册

    在做微信小程序的时候,很多都会用到生成海报分享功能,刚好最近项目有这个需求,今天就发出来记录下 首先是使用canvas绘制一张海报,微信小程序的canvas有老版本和新版本我是用的是新版本 代码如下 js部分 我的做法是给canvas隐藏了不看到 ,等canvas绘制完毕后导出的url直接赋给

    2023年04月08日
    浏览(29)
  • 基于 Taro 框架的微信小程序 canvas 绘图海报组件

    项目需要保存收款码,效果如图: (此文仅代表个人日常工作记录,能力有限描述并不全面) 1.安装 npm i taro-plugin-canvas -S --production(taro-plugin-canvas 是基于 Taro 框架的微信小程序 canvas 绘图组件,封装了常用的操作,通过配置的方式生成分享图片)  2.引入:import { TaroCanvas

    2024年01月21日
    浏览(31)
  • 在H5、微信小程序中使用canvas绘制二维码、分享海报

    提示:绘制二维码的插件有很多,有些仅支持H5,有些只适用微信小程序,故读者在使用二维码插件前需要先查看插件官方文档,查看其支持的环境 H5中安装qrious插件 引入qrious canvas模板 初始化canvas 二维码绘制并渲染 微信小程序中安装weapp-qrcode插件 引入weapp-qrcode canvas模板

    2024年02月14日
    浏览(33)
  • 微信小程序使用canvas画布生成二维码海报分享图片(完整示例代码)

    canvas.js //获取应用实例 const app = getApp() Page({ /** 页面的初始数据 */ data: { // canvas _width: 0, //手机屏宽 _heigth: 0,//手机屏高 swiperHeight: 300,//主图图片高度 canvasType: false,//canvas是否显示 loadImagePath: ‘’,//下载的图片 imageUrl: ‘https://cos.myfaka.com/car/service/1.jpg’, //主图网络路径 codeU

    2024年04月12日
    浏览(55)
  • 微信小程序canvas画图案列,实现生成头像并保存,小程序新版canvas变化,小程序中canvas注意事项

    你一定见过很多制作头像的小程序,无论是国庆的红旗,圣诞的帽子,还是疫情的口罩,都可以用小程序生成应景的头像,那么具体的代码是怎么实现的呢?前些天帮别人做了一个生成姓氏头像的功能,里面的实现原理基本一致,都是通过Canvas实现,以生成姓氏头像为例,记录一下小程序的

    2024年02月09日
    浏览(40)
  • 微信小程序canvas type=2d生成海报保存到相册、文字换行溢出显示...、文字删除线、分享面板

    做个简单的生成二维码海报分享, 我做的时候也找简单的方法看能不能实现页面直接截图那种生成图片,原生小程序不支持, 不多介绍下面有全部代码有注释、参数自行替换运行看看,还有需要优化的地方,有问题可以咨询我,我写的已经上线 如图:

    2024年02月11日
    浏览(32)
  • 微信小程序wx.createCanvasContext废弃,使用wx.createOffscreenCanvas接口的绘制canvas 2d海报遇到的踩坑经验。

    在wxml页面写id,canvas-id已经没用了。然后像html一样,使用js获取这个canvas标签组件,在微信的js获取使用wx自带的方法。如下 

    2024年02月11日
    浏览(31)
  • 微信小程序动态海报

    参考文献: 微信小程序生成分享海报(附带二维码生成) - 简书 需求背景: 微信小程序固定图片,无法自动链接,分享页面内容 解决方案: 拆分海报内容,由以下几个组成 1、用户图像 2、小程序码 3、原文路径 4、原文简介 5、海报背景 6、海报标题 文件目录: 操作流程:

    2024年02月07日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包