1. 程式人生 > 其它 >【經驗】微信小程式 canvas 圖片拉伸 對 wx.canvasToTempFilePath 截圖匯出的影響。

【經驗】微信小程式 canvas 圖片拉伸 對 wx.canvasToTempFilePath 截圖匯出的影響。

前言

canvas如果圖片出現了拉伸,wx.canvasToTempFilePath匯出的圖片會出現不可預測的奇怪不完整情況。所以咱們研究下。

 

 

介面說明

https://developers.weixin.qq.com/miniprogram/dev/api/canvas/wx.canvasToTempFilePath.html

 

 

 

 

 

 

測試用例

canvas在介面的尺寸:300,300

圖片尺寸:602,397

截圖座標:0,0,150,150

 

模式 none,canvas=介面尺寸,不拉伸

 

圖片沒有完全顯示,截圖匯出的圖片正好是canvas 顯示部分的100,150.

 

模式 scaleToFill,canvas= 圖片尺寸,出現拉伸

 

截圖的尺寸雖然是100x150,但是內容不是50%的畫面部分,而是更長了。

已知 canvas 介面尺寸長度=300,canvas 程式碼尺寸長度=397

按照縮放演算法,影象資料沒有壓縮,但是顯示壓縮了,所以如果寬度不變,高度150,實際上不失真的高度 = 397 * 300 / 602 = 197.840531561461794;

如果截圖的是150,則,實際上實在198,300的 canvas 上進行截圖。

所以如果按照顯示高度 = 300,要實現截圖50%,則計算出來 x = 150 / 300  * 397 * 300 / 602 = 150 * 397 / 602 = 98.920265780730897

 

這樣就正確的得到顯示部分的截圖;

 

模式 aspectFit, canvas= 縮放後介面尺寸,圖片完整顯示

同樣截圖 100,150尺寸的圖片:

 

同樣可以看到沒有被拉伸,正確截圖。 

 

 

騰訊 BUG 發現:

如果canvas 初始化介面寬度是300,畫圖前調整為414,則截圖輸出會出錯。

 

 

但是如果一開始初始化就是414,則正確:

 

 

這個問題就是導致了匯出的 bug