uni-方式
drawImageQueue(images, obj, done) {
//
console.log('打印图片', images);
let queue = [];
let self = this;
let ctx = this.getCanvasContext(obj);
let isClear = false;
if (typeof (images) === 'string') {
images = [images];
}
for (let img of images) {
if (img.length > 0) {
queue.push(img);
}
}
let doQueue = function () {
let src = null;
if (queue.length > 0) {
src = queue[0];
queue.splice(0, 1);
uni.getImageInfo({
src: src,
success(res) {
if (!isClear) {
isClear = true;
ctx.clearRect(0, 0, self.size.width, self.size.height);
}
ctx.drawImage(res.path, 0, 0, self.size.width, self.size.height)
if (queue.length > 0) {
doQueue();
} else {
ctx.draw(true,() => {
typeof (done) === 'function' && done.call();
});
}
},
fail(res) {
console.error('img fail', src,res);
if (queue.length > 0) {
doQueue();
} else {
ctx.draw(true,() => {
typeof (done) === 'function' && done.call();
});
}
}
});
}
}
doQueue();
},
使用console.time+console.timeEnd 平均执行时间在200ms以上
原生H5方式
function drawImage(images,done) {
console.log('打印图片', images);
var queue = [];
var isClear = false;
if (typeof (images) === 'string') {
images = [images];
}
for (var i = 0;i<images.length;i++) {
var img = images[i];
if (img.length > 0) {
queue.push(img);
}
}
var doQueue = function () {
var src = null;
if (queue.length > 0) {
src = queue[0];
queue.splice(0, 1);
getImage({
src: src,
success:function(res) {
console.log('res',res)
if (!isClear) {
isClear = true;
ctx.clearRect(0, 0, size.width, size.height);
}
ctx.drawImage(res.path[0], 0, 0, size.width, size.height)
if (queue.length > 0) {
doQueue();
} else {
typeof (done) === 'function' && done.call();
}
},
fail:function(res) {
console.error('img fail', src,res);
if (queue.length > 0) {
doQueue();
} else {
typeof (done) === 'function' && done.call();
}
}
});
}
}
doQueue();
}
function getImage(opt) {
var img = new Image(1920,1080);
img.src = opt.src;
img.onload = opt.success;
img.oncompvare = opt.success;
}
//使用console.time+console.timeEnd 平均执行时间在60ms以内
//图片使用同样的地址。使用的本机图片,加载耗时不超过5ms
吃西瓜的花猫 (作者)
我现在使用的 3.1.4.20210305 还是有这个问题。
是在从canvas里获取图片转为base64 到外面的image中使用时,如果内容里含有 rpx 还是会导致图片无法显示,
只能使用img标签来处理。
image组件 中的img标签是可以显示图片的, 但是同级的div中背景图片无法显示,导致空白
2021-03-10 22:41
DCloud_UNI_GSQ
回复 吃西瓜的花猫: 这个 base64 能否发一下
2021-03-11 10:44