小程序圖片轉base64


引入

前段時間有個需求涉及小程序還原H5當中的圖片上傳功能。
沒有細節考慮好就跟后端的老哥說接口不用改直接前端處理。。。
現在想想真是心疼我自己

現階段的一些思路。

服務器處理

直接上傳流文件到服務器,然后在服務器做base64轉換處理。

利用小程序canvasGetImageData方法和upng

  • 既然是使用canvas方法,那么首先需要在wxml里添加一個canvas元素

    <canvas canvas-id="mycanvas"></canvas>

    如果不加,頁面canvasGetImageData方法無法生成,display:none也不行

  • js部分省略獲取imgPath過程

    var canvasid='mycanvas'
    var ctx = wx.createCanvasContext(canvasid) //操作對應id的canvas
    
    ctx.drawImage(imgPath,0,0,width,height)//繪畫圖片,把圖片放進去。這里的寬高可以使用wx.getImageInfo獲取用戶上傳圖片本來的寬高
    
    ctx.draw(function(){
        wx.canvasGetImageData({
            canvasId:canvasid //參數,canvas標簽的id
            x:0,//起始位置,x坐標
            y:0,
            width:width,
            height:height,
            success:function(res){
                //引入upng,將圖片轉化成utf-8格式
                let pngData = upng.encoded([res.data.buffer].res.width,res.height)//再轉化成base64
                let bs64 = wx.arrayBufferToBase64(pngData)
            }
        })
    });
  • 必須引入upng組件
  • 基礎庫必須大於1.9.0

通過小程序request資源請求(暫不可用)

  • js部分省略獲取imgPath過程
wx.request({
  url:imgPath,
  responseType: 'arraybuffer',//最關鍵的參數,設置返回的數據格式為arraybuffer
  success:res=>{
        let base64 = wx.arrayBufferToBase64(res);//把arraybuffer轉成base64
        base64 = 'data:image/jpeg;base64,' + base64 //不加上這串字符,在頁面無法顯示的哦
        console.log(base64) //打印出base64字符串,可復制到網頁校驗一下是否是你選擇的原圖片呢
      }
});
  • 基礎庫必須大於1.9.0

總結

使用upng方法確實能解決問題,但是引入upng組件相對有些龐大(只相對於處理base64這個功能),現階段更加合適的處理方式還是上傳到后端來處理圖片格式。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM