小程序

微信小程序-canvas压缩图片使用入门

2019-05-29  本文已影响0人  渺渺兮余木

微信小程序canvas组件官方文档

微信小程序canvas组件官方文档
canvas API

canvas组件介绍

<canvas style="width: 200px;height: 200px;"
                canvas-id="myCanvas"
                disable-scroll="{{false}}"
                bindtouchstart="startTouch"
                bindtouchmove="moveTouch"
                bindtouchend="endTouch"
                bindtouchcancel="cancelTouch"
                bindlongtap="longTap"
                binderror="canvasBindError"</canvas>
官方文档中对canvas属性均有介绍,这里对于入门简要说明一下:

压缩图片

<!-- wxml中内容 -->
<canvas class="myFanvas" style="width: 300px; height: 200px;" canvas-id="myCanvas"></canvas>
<button bindtap='chooseImage'>选择图片绘制到屏幕</button>
//js中data
data:{
  imageW:[],//用于存放选中图片的宽
  imageH:[],//用于存放选中图片的高
}
//js文件内容
chooseImage:function(){
    var that = this
    //选择图片
    wx.chooseImage({
      count:1,//只可选一张图,最高可为9
      success: function(res) {
          wx.getImageInfo({
            src: res.tempFilePaths,
            success(res){
              that.data.imageW.push(res.width)//将图片宽放入data中
              that.data.imageH.push(res.height)//将图片高放入data中
            }
          })
        const ctx = wx.createCanvasContext("myCanvas")//创建画布上下文
        ctx.drawImage(res.tempFilePaths[0], 0, 0, that.data.imageW[0], that.data.imageH[0],0,0,200,200)//描述图片到画布上
        ctx.draw()//绘制画布
      }
    })
  }

上述代码简介
1.首先在wxml文件中添加一个canvas-id="myCanvas"的画布组件和一个button,点击该button触发js中chooseImage函数
2.wx.chooseImage()为微信原生API,用于选择手机中的photos或者使用相机拍照
3.在wx.chooseImage()中success(图片选择成功后的回调函数),创建CanvasContext实例ctx
4.使用ctx.drawImage()将第一张图片描述到id为myCanvas的canvas组件,请注意描述的内容并不能显示到canvas上
5.这里res.tempFilePaths[0].width和res.tempFilePaths[0].height为所选图片的宽高,而200,200为绘制到canvas上的宽高
6.使用ctx.draw()将上述中的所有描述内容绘制到画布上

//js续
showImage:function(){
    var that = this
    wx.canvasToTempFilePath({
      x:0,
      y:0,
      width: 200,
      height: 200,
      destWidth:100,
      destHeight:100,
      canvasId: "myCanvas",
      quality: 1,
      success(res) {
        that.setData({
          imgFilePath: res.tempFilePath
        })
      }
    })
  }
<!-- wxml中内容 -->
<image style='width: 200px; height: 200px;' src="{{imgFilePath}}" ></image>

上述代码简介
1.使用wx.canvasToTempFilePath()将画布中的内容导出为图片,并将该图片的临时地址写入data中
2.wx.canvasToTempFilePath()中x、y为所截取图片左上角在canvas上的位置,width、height为图片右下角在canvas上的位置,destWidth、destHeight为输出图片的宽高,上述所有变量赋值单位均为px
3.可以在wxml中添加一个view组件显示该图

将压缩后的图片存入手机

//js续
saveImage:function(){
    var that = this
    wx.saveImageToPhotosAlbum({
      filePath: that.data.imgFilePath,
      success:function(){
        console.log("保存成功")
      }
    })
  }

上述代码简介
1.添加一个函数用于存放图片到系统相册
2.使用wx.saveImageToPhotosAlbum()保存图片,其中filePath为该图片临时路径

总结

1.在canvas中创建一个canvas组件,不在页面上显示该组件思路:将该组件放在wxml最下方,在将该组件向右移出屏幕范围
示例

.myFanvas{
  position: fixed;
  left: 1110rpx
}

2.使用wx.chooseImage()选择系统照片或调用相机拍照
3.使用 wx.createCanvasContext()ctx.drawImage()draw()将图片写入canvas中
4.使用wx.canvasToTempFilePath()将canvas中内容导出为图片,默认格式png,也可使用fileType:"jpg"将格式改为jpg,现只支持两种;已压缩完成
5.使用wx.saveImageToPhotosAlbum()将导出的图片存入系统相册

上一篇下一篇

猜你喜欢

热点阅读