小程序壓縮圖片慈格,已驗證OK怠晴!
一、wx.compressImage()
官方提供的圖片壓縮方法浴捆,親測iOS有效蒜田,Android基本起不到壓縮的效果,反而有時候會越壓越大选泻。
二冲粤、使用canvas畫圖
這是很多教程都有說到的方法,但是自己試過以后滔金,發(fā)現很多坑并沒有解決色解。
源碼:Github
這是寫好的一個庫,可以直接使用餐茵。下面的內容對照源碼去看科阎。
這里說一下遇到的問題:
1、canvas的寬高
this.page.setData({ //設置畫板寬高
canWidth: systemInfo.screenWidth,
canHeight: systemInfo.screenHeight
})
- 設置canvas的寬高的時候一定不要動態(tài)設定忿族,要提前設置好锣笨,不要變動蝌矛,不然會出現位置大小不對等莫名其妙的問題。
2错英、wx.canvasToTempFilePath() 方法的使用
ctx.draw(false, __ => {
wx.canvasToTempFilePath({
x: 0,
y: 0,
width: cW,
height: cH,
destWidth: cW,
destHeight: cH,
fileType: 'jpg',
quality,
canvasId: 'compressCanvasId',
fail: e => {
},
success: function success(res) {
},
});
});
- wx.canvasToTempFilePath() 應當寫在 CanvasContext.draw() 方法的回調當中入撒,而不應該用延時;
- 參數x椭岩、y表示截取畫布的位置茅逮,參數width、height表示截取畫布的大小判哥,而不是畫布canvas的位置和大小献雅。本庫中是提前設置好canvas的寬高與屏幕大小一致,然后從左上角的零點開始截取你設定的大小塌计,最大不會超過畫布的寬高挺身。若要截取完整的圖片,這里的寬高應該與
ctx.drawImage(src, 0, 0,width, height)
中寬高一致锌仅; - 參數destWidth章钾、destHeight表示輸出圖片的寬高,默認的是截取畫布的寬高width热芹、height * 屏幕像素密度
wx.getSystemInfoSync().pixelRatio
(真機是正確的贱傀,模擬器不是)。這兩個值我們可以設定我們想要的寬高伊脓,但并不是寬高越小圖片size就越星瞎俊; - 參數fileType必須設定為'jpg'丽旅;
- 參數quality表示輸出圖片的質量椰棘,只有設定這個值才能使圖片的size變小。