微信小程序原生将两张图片合成一张并保存至手机中

这篇具有很好参考价值的文章主要介绍了微信小程序原生将两张图片合成一张并保存至手机中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序原生将两张图片合成一张并保存至手机中

我是一名刚毕业工作俩月的实习生,技术很菜,如果文章有写的地方,在评论区写出来,让像我一样的小白少走点弯路。.

需要将图片保存至手机, 但是微信小程序官方文档提供的保存至手机api参数是一张图片,而我这是两张图片,一张背景图,一张接口返回的二维码,所以需要先将两张图片合成一张

第一步:在wxml中写canvas 画布,

  <canvas id="myCanvas" type="2d" style="border: 1px solid red;  width: 340px; height: 450px; z-index: 11;" />

 第二步:在js中创建实列获取对象

wx.createSelectorQuery()
    .select('#myCanvas') // 在 WXML 中填入的 id
    .fields({ node: true, size: true })
    .exec((res) => {
        // Canvas 对象
        const canvas = res[0].node
        // 渲染上下文
        const ctx = canvas.getContext('2d')
}

切记这段代码在onLoad的生命周期中写。创建 Canvas 实例,获取 CanvasRenderingContext2D 对象(Canvas 绘图上下文)来绘制形状、文本、图像等。

第三步:设置宽高调整图片

// Canvas 画布的实际绘制宽高
        const width = res[0].width
        const height = res[0].height
// 初始化画布大小
        const dpr = wx.getWindowInfo().pixelRatio
        canvas.width = width * dpr
        canvas.height = height * dpr
        ctx.scale(dpr, dpr)

我的画布宽高在wxml的行内样式中写了,通过这段代码来获取

第四步:绘制内容

直接看整个代码

onLoad(options) {
    
    wx.createSelectorQuery()
    .select('#myCanvas') // 在 WXML 中填入的 id
    .fields({ node: true, size: true })
    .exec((res) => {
        // Canvas 对象
        const canvas = res[0].node
        // 渲染上下文
        const ctx = canvas.getContext('2d')

        // Canvas 画布的实际绘制宽高
        const width = res[0].width
        const height = res[0].height
        // 初始化画布大小
        const dpr = wx.getWindowInfo().pixelRatio
        canvas.width = width * dpr
        canvas.height = height * dpr
        ctx.scale(dpr, dpr)

       
        // 图片对象
        const image = canvas.createImage()//本地背景图 
        const imgs = canvas.createImage()//接口返回二维码图片
        // 图片加载完成回调
        image.onload = () => {
            // 将图片绘制到 canvas 上
            ctx.drawImage(image, 0, 0,340,450)
            ctx.drawImage(imgs,115,124,110,110)
            // 文本 一定要写到图片后面 要不然会被盖住
            ctx.font = "15px SimHei";
            ctx.textAlgin = "left"
            ctx.fillStyle = "#333333";
            ctx.fillText(store.data.User.info.nickname, 120, 275);
            ctx.font = "12px SimHei";
            ctx.fillStyle = "#999999";
            ctx.fillText(store.data.User.info.shop_info.name+' 店主', 100,300);
            ctx.textAlgin = "center"

        }
        // 设置图片src
        image.src = '../../../images/二维码背景.png'
        imgs.src = 'http://ljtest.remo.cn/uploads/qrcode/shop1.png'

        //没加定时器之前合成的图片是一片灰色,加了之后才有图片,测试了一下最少需要400毫秒
        setTimeout(()=>{
          wx.canvasToTempFilePath({
            canvas: canvas,
            success: res => {
                // 生成的图片临时文件路径
                this.setData({
                  img:res.tempFilePath
                }) 
            },
        })
        },1000)
    })
    



  },

使用 CanvasRenderingContext2D 绘制,根据业务需要在画布中绘制头像、文字、背景等。有不懂的代码直接去微信官方文档查一下,他们讲的很详细,我这里就不一 一解释了

接下来该保存图片至手机了

我直接封装好了,如何在点击事件的函数中直接调用

下面是我封装的代码

// 保存图片到本地
  export function getAvaterInfo (url) {
     
    wx.saveImageToPhotosAlbum({
        filePath: url,
        success(res) {
          wx.showModal({
            content: '图片已保存到相册,赶紧晒一下吧~',
            showCancel: false,
            confirmText: '好的',
            confirmColor: '#333',
            success: function (res) {
              if (res.confirm) { }
            },
            fail: function (res) { }
          })
        },
        fail: function (err) {
          console.log(err)
          wx.showModal({
            content: '需要授权保存到相册',
            showCancel: false,
            confirmText: '好的',
            confirmColor: '#333',
            success: function (res) {
              if (res.confirm) {
                wx.openSetting({
                  success(settingdata) {
                    console.log(settingdata)
                    if (settingdata.authSetting['scope.writePhotosAlbum']) {
                      console.log('获取权限成功,给出再次点击图片保存到相册的提示。')
                    } else {
                      console.log('获取权限失败,给出不给权限就无法正常使用的提示')
                    }
                  }
                })
              }
            },
            fail: function (res) { }
          })
        }
      })
  }

然后引用、在点击事件中调用

const funct = require ('../../../utils/function')
abc(){
    funct.getAvaterInfo(this.data.img)
  },

函数名随便起的,将合成的图片直接传过去就行。文章来源地址https://www.toymoban.com/news/detail-489780.html

到了这里,关于微信小程序原生将两张图片合成一张并保存至手机中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C# 多张图片合成一张PDF

            我是将每张图片转为byte[],再将所有的字节数组转为byte[][],然后对byte[][]进行的处理,大家有其他格式的图片要进行处理的可以先转为上述数据格式。 语种:C# 用到的第三方库:PdfSharp.dll(可直接使用PDFsharp包),如下图 ①申明一个 PDF文件对象 (PdfDocument变量) ②遍

    2024年02月15日
    浏览(47)
  • python将多张图片拼成一张矩阵图,合成一张大图

    引言 环境准备 代码实现 效果演示 总结 在图像处理和图像展示的应用中,将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 为了实现这个目标,我们需要安装Pillow库。Pillow是Python中一个强大的图像处理库

    2024年02月14日
    浏览(27)
  • 微信小程序中,将一张图设置成背景图的几种方式

    三种方法实现 1、使用网络图片 2、使用base64格式图片,访问图片base64编码  将背景图片使用编码base64进行转换, 网址如下: base64图片在线转换工具 - 站长工具 3、使用标签 注意有小朋友可能要用html那一套,使用background-image不适用于微信小程序 background-image: url(\\\"../images/loc

    2024年02月11日
    浏览(51)
  • 微信小程序调用科大讯飞 在线合成语音接口(文字转语音)

    科大讯飞在线文档 https://www.xfyun.cn/doc/tts/online_tts/API.html 科大讯飞调用接口 地址 https://blog.csdn.net/jinxi1112/article/details/122835386 微信小程序base64转ArrayBuffer替代方案 https://www.homedt.net/43939.html 注意点 调用函数 参考大佬的实例 这里说一下注意的点 微信小程序 不支持在线的 base64

    2024年02月10日
    浏览(31)
  • 微信小程序更改AI类目-深度合成-AI绘画/AI问答教程

    实测截图 准备材料: 1.营业执照 2.企业公章 一、首先我们需要到百度智能云进行企业认证 https://cloud.baidu.com/ 注册登录后进行企业认证 认证成功后申请千帆大模型平台和AI作画 开通付费服务 开通完以后点击右上角财务 选择合同管理 申请合同 将所有的选项选中 然后下载下来

    2024年02月08日
    浏览(30)
  • canvasdrawer 微信原生小程序生成海报图片

    在小程序中生成海报是一种非常有效的推广方式 用户可以使用小程序的过程中生成小程序海报并分享给他人 通过海报的形式,用户可以直观地了解产品或服务的特点和优势 目前,小程序海报有两种常见的实现方式: · canvas 绘制海报 · 服务端绘制海报 这两种方式各有千秋

    2024年01月21日
    浏览(38)
  • 微信小程序--原生

    1:常见的几种场景 2:动态绑定内容 3:动态绑定属性 4:三元运算 4:算数运算 1:定义数据 2:渲染结构 3:美化样式 4:绑定input事件处理函数 1:运行方式不同 2:使用场景 1:rpx尺寸单位 1:什么是rpx尺寸单位 2:rpx的实现原理 3:rpx与px之间的单位换算*(*了解就行) 2:

    2024年02月13日
    浏览(31)
  • 前端笔记--微信小程序(原生)

    介于工作需要,这里总结一下微信小程序的开发。 官网:微信小程序 开发文档:微信开放文档 vscode安装插件:   ‘ wxml 对应 html wxss 对应 css js 逻辑层 json 数据配置层 同样也是MVVM模型 (1)app.json pages :该项目的所有页面,字符串对应文件路径,但是不要加后缀名。 我们可

    2024年02月11日
    浏览(29)
  • 微信小程序 之 原生开发

    小程序的核心技术主要是三个: 页面布局:WXML ,类似HTML 页面样式:WXSS ,几乎就是CSS(某些不支持,某些进行了增强,但是基本是一致的) 页面脚本: JavaScript+WXS(WeixinScript) 网址 : 微信小程序 网址 : 微信开发者工具下载地址与更新日志 | 微信开放文档 Vue的MVVM和小程序MVV

    2023年04月08日
    浏览(40)
  • 原生小程序 微信小程序 使用ucharts

    背景:    原生小程序需要好看的折线图。 实现: 小程序开发版本 一般是uni-app项目使用ucharts在原生微信小程序也是可以使用。 方法: 源码下载: uCharts: 高性能跨平台图表库,支持H5、APP、小程序(微信小程序、支付宝小程序、钉钉小程序、百度小程序、头条小程序、QQ小

    2024年02月09日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包