使用新版canvas2D 绘图 drawImage方法,ios端绘图不能从(0,0)点开始画图。
测试环境: iPad mini4 系统 ios13.5.1 微信版本 7.0.14
测试用图
演示效果:
上方灰色区域为 新版canvas接口,
下方为旧版接口,实现同样功能。
正常的情况 应该是从(0,0)点开始绘图。
代码片段
https://developers.weixin.qq.com/s/O5BsQ6m472jx
说明:点击灰色区域上传图片,请使用测试用图
关键代码截图
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|
小程序 | Bug | canvas drawImage | 微信iOS客户端 | 7.0.14 | 2.12.0 |
1 个回答
const canvas = res[0].node
const ctx = canvas.getContext('2d')
const width = res[0].width
const dpr = wx.getSystemInfoSync().pixelRatio
canvas.width = width * dpr
canvas.height = height * dpr
ctx.scale(dpr, dpr)
1.抓取到的canvas 为PX ,要*像素比
2.ctx 要使用scale(dpr,dpr),进行缩放到正常大小
3.感觉你的imgw 和imgh 要 * dpr
👇 -------如果感觉回答有用,请点击有用按钮,让答案帮助更多的人
initCanvasNew:function(imgW,imgH){
var that=this;
////////////////修改/////////////////////
const dpr = wx.getSystemInfoSync().pixelRatio;
that.setData({
canvasDisplayW:imgW*dpr,
canvasDisplayH:imgH*dpr
})
////////////////修改/////////////////////
const query = wx.createSelectorQuery()
query.select('#myCanvas')
.fields({ node: true, size: true })
.exec((res) => {
const width = res[0].width
const height = res[0].height
// 缩放
my_ctx.scale(dpr, dpr)
myCanvas = res[0].node;
my_ctx = myCanvas.getContext('2d');
my_dpr=dpr;
////////////////修改/////////////////////
myCanvas.width = my_dpr*width;
myCanvas.height = my_dpr*height;
////////////////修改/////////////////////
console.log("my_dpr:"+my_dpr)
const windowWidth= wx.getSystemInfoSync().windowWidth;
my_windowWidth=windowWidth;
let imgRatio=imgH/imgW;
console.log("res[0]")
console.log(res[0])
that.setData({
canvasDisplayW:windowWidth,
canvasDisplayH:windowWidth * imgRatio,
canvasw:imgW,
canvash:imgH,
})
console.log("myCanvas.W H :"+myCanvas.width+" "+myCanvas.height)
// 绘图
let bigImg=myCanvas.createImage();
bigImg.src=my_img;
bigImg.onload = (e) => {
my_ctx.drawImage(bigImg, 0, 0);
}
bigImg.onerror = (e) => {
console.error('创建大图错误')
console.error(e)
}
})
},
看看这样行么?