canvasContext.drawImage 画图会缩放的问题
发布于 5 年前 作者 duanchao 995 次浏览 来自 问答

用 canvasContext.drawImage 的 drawImage(sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 这种方式画图片时,如果图片的宽度是高度的2倍以上,或者高度是宽度的2倍以上,比如这种图片 

会有问题,画出来的大小不是 dWidth 和 dHeight 这么大,但是在微信开发者工具里是正常的,手机上显示不正常。

代码

js

Page({

data: {

maxWidth: 315,

},

oneImg: function(e) {

var that = this;

var maxWidth = that.data.maxWidth;

var ctx = wx.createCanvasContext(‘myCanvas’)

// 获取点击时 x 轴的值

var x = e.changedTouches[0].x;

// 获取点击时 y 轴的值

var y = e.changedTouches[0].y;

// 选择图片

wx.chooseImage({

success: function(res) {

var fileUrl = res.tempFilePaths[0];

wx.getImageInfo({

src: res.tempFilePaths[0],

success: function(res) {

var width = res.width;

var height = res.height;

//  取短边为正方形 canvas的宽

var sWidth = width > height ? height : width;

ctx.drawImage(fileUrl, 0, 0, sWidth, sWidth, 0, 0, maxWidth, maxWidth);

ctx.draw(true)

}

})

}

})

},

})

wxss

page {

background: #93E0FE;

}

.container {

width: 315px;

height: 315px;

margin: 20rpx auto;

background: #fff;

}

wxml

<canvas class=‘container’ bindtouchend=“oneImg” canvas-id=“myCanvas”></canvas>

4 回复

已知问题,下个版本修复.

这是 Android 上的一个 BUG,Android 上 drawImage 传入的尺寸一律都按物理像素计算,目前要规避这个 BUG,可以将尺寸和位置乘以 pixelRatio。

let { pixelRatio } = wx.getSystemInfoSync()
console.log(pixelRatio)
ctx.drawImage(fileUrl, 0, 0, sWidth*pixelRatio, sWidth*pixelRatio, 0, 0, maxWidth*pixelRatio, maxWidth*pixelRatio);

你好,请提供出现问题的机型和微信版本,以及能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

代码片段:wechatide://minicode/Seeoeimp7IeJ

机型:小米5

微信版本:6.7.0

回到顶部