- canvas 2d 保存临时文件对高dpr设备不友好?
经过测试 canvas 2d 在dpr为3的真机上.canvas 大小设置为:540px*540px,调用 canvasToTempFilePath 就会抛出异常: canvasToTempFilePath:fail:convert native buffer parameter fail.native buffer exceed size limit. 而540px*540px 实际在屏幕上显示只有很小一块。而现在Android平台很多设备dpr都是3。 为什么不能提供浏览器原生的canvas.toBlob,此时blob已经经过压缩,会比getImageData节省很多内存。 如果我们就可以把blob写入存储。 [图片]
2019-11-28 - android 页面高度发生变化后,canvas显示异常
[代码]<[代码][代码]view[代码] [代码]style[代码][代码]=[代码][代码]"height:{{mHeight||0}}px;"[代码][代码]> </[代码][代码]view[代码][代码]>[代码][代码]<[代码][代码]canvas[代码] [代码]id[代码][代码]=[代码][代码]"mCanvas"[代码] [代码]type[代码][代码]=[代码][代码]"2d"[代码] [代码]style[代码][代码]=[代码][代码]"height:100px;width:100px"[代码][代码]>[代码][代码]</[代码][代码]canvas[代码][代码]>[代码][代码]const {[代码][代码] [代码][代码]pixelRatio[代码][代码]} = wx.getSystemInfoSync();[代码] [代码]wx.createSelectorQuery().select([代码][代码]"#mCanvas"[代码][代码]).fields({[代码][代码] [代码][代码]node: [代码][代码]true[代码][代码],[代码][代码] [代码][代码]size: [代码][代码]true[代码][代码]}).exec(([{[代码][代码] [代码][代码]node,[代码][代码] [代码][代码]width,[代码][代码] [代码][代码]height[代码][代码]}]) => {[代码][代码] [代码][代码]const ctx = node.getContext([代码][代码]"2d"[代码][代码]);[代码][代码] [代码][代码]node.width = width * pixelRatio;[代码][代码] [代码][代码]node.height = height * pixelRatio;[代码][代码] [代码][代码]ctx.scale(pixelRatio, pixelRatio);[代码] [代码] [代码][代码]ctx.beginPath();[代码][代码] [代码][代码]ctx.arc(50, 50, 50, 0, 2 * Math.PI);[代码][代码] [代码][代码]ctx.closePath();[代码][代码] [代码][代码]ctx.stroke();[代码] [代码] [代码][代码]this[代码][代码].setData({ mHeight: 20 });[代码][代码]});[代码]模拟器显示效果: [图片] 真机实际结果: [图片] 只能在Android真机上复现,测试机型:魅族16th flyme8.0.0.0A,华为 honor 8 lite PRA-AL00 8.0.0.348。 规避办法: 每次setData后重绘canvas。
2019-11-27 - CanvasContext.save,CanvasContext.restore 行为怪异?
ctx.font = ctx.font.replace(/\d+px/, "10px"); console.log(ctx.font); ctx.save(); ctx.font = ctx.font.replace(/\d+px/, "18px"); ctx.restore(); console.log(ctx.font); 输出: 10px sans-serif 18px sans-serif 根据文档预期结果为: 10px sans-serif 10px sans-serif 根据文档save应当保存当前的上下文的字体,在测试过程中发现font不能保存 是否可以在save的相关文档补充一下哪些属性需要自己保存。 更新: 调用 restore 后, fillText会使用 restore后 的字体信息, font getter 会返回 restore前 的字体信息, measureText 返回的宽度是使用 restore前的字体信息计算的。
2019-09-29