微信小程序-canvas壓縮圖片使用入門

微信小程序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>
官方文檔中對(duì)canvas屬性均有介紹,這里對(duì)于入門簡(jiǎn)要說明一下:
  • canvas 為畫布組件名
  • style 定義畫布樣式 參考CSS教程 這里定義一個(gè)寬200px,高200px的畫布組件
  • canvas-id 設(shè)置該畫布的id(可看做該畫布的名字)
  • disable-scroll 類型為Boolean 官方解釋:當(dāng)在 canvas 中移動(dòng)時(shí)且有綁定手勢(shì)事件時(shí),禁止屏幕滾動(dòng)以及下拉刷新
  • 以下類型顧名思義分別為開始觸碰、滑動(dòng)、結(jié)束觸碰動(dòng)作以及觸碰時(shí)被打斷動(dòng)作、長按動(dòng)作和出現(xiàn)錯(cuò)誤時(shí)屬性

壓縮圖片

<!-- wxml中內(nèi)容 -->
<canvas class="myFanvas" style="width: 300px; height: 200px;" canvas-id="myCanvas"></canvas>
<button bindtap='chooseImage'>選擇圖片繪制到屏幕</button>
//js中data
data:{
  imageW:[],//用于存放選中圖片的寬
  imageH:[],//用于存放選中圖片的高
}
//js文件內(nèi)容
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")//創(chuàng)建畫布上下文
        ctx.drawImage(res.tempFilePaths[0], 0, 0, that.data.imageW[0], that.data.imageH[0],0,0,200,200)//描述圖片到畫布上
        ctx.draw()//繪制畫布
      }
    })
  }

上述代碼簡(jiǎn)介
1.首先在wxml文件中添加一個(gè)canvas-id="myCanvas"的畫布組件和一個(gè)button,點(diǎn)擊該button觸發(fā)js中chooseImage函數(shù)
2.wx.chooseImage()為微信原生API,用于選擇手機(jī)中的photos或者使用相機(jī)拍照
3.在wx.chooseImage()中success(圖片選擇成功后的回調(diào)函數(shù)),創(chuàng)建CanvasContext實(shí)例ctx
4.使用ctx.drawImage()將第一張圖片描述到id為myCanvas的canvas組件,請(qǐng)注意描述的內(nèi)容并不能顯示到canvas上
5.這里res.tempFilePaths[0].width和res.tempFilePaths[0].height為所選圖片的寬高,而200,200為繪制到canvas上的寬高
6.使用ctx.draw()將上述中的所有描述內(nèi)容繪制到畫布上

//js續(xù)
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中內(nèi)容 -->
<image style='width: 200px; height: 200px;' src="{{imgFilePath}}" ></image>

上述代碼簡(jiǎn)介
1.使用wx.canvasToTempFilePath()將畫布中的內(nèi)容導(dǎo)出為圖片,并將該圖片的臨時(shí)地址寫入data中
2.wx.canvasToTempFilePath()中x、y為所截取圖片左上角在canvas上的位置,width、height為圖片右下角在canvas上的位置,destWidth、destHeight為輸出圖片的寬高,上述所有變量賦值單位均為px
3.可以在wxml中添加一個(gè)view組件顯示該圖

將壓縮后的圖片存入手機(jī)

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

上述代碼簡(jiǎn)介
1.添加一個(gè)函數(shù)用于存放圖片到系統(tǒng)相冊(cè)
2.使用wx.saveImageToPhotosAlbum()保存圖片,其中filePath為該圖片臨時(shí)路徑

總結(jié)

1.在canvas中創(chuàng)建一個(gè)canvas組件,不在頁面上顯示該組件思路:將該組件放在wxml最下方,在將該組件向右移出屏幕范圍
示例

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

2.使用wx.chooseImage()選擇系統(tǒng)照片或調(diào)用相機(jī)拍照
3.使用 wx.createCanvasContext()、ctx.drawImage()、draw()將圖片寫入canvas中
4.使用wx.canvasToTempFilePath()將canvas中內(nèi)容導(dǎo)出為圖片,默認(rèn)格式png,也可使用fileType:"jpg"將格式改為jpg,現(xiàn)只支持兩種;已壓縮完成
5.使用wx.saveImageToPhotosAlbum()將導(dǎo)出的圖片存入系統(tǒng)相冊(cè)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容