【发布时间】:2016-10-26 13:44:45
【问题描述】:
如何将图像块渲染到画布元素?
到目前为止,我有这两个(简化的)函数来捕获图像,将其转换为 blob 并最终在画布上渲染 blob in this codepen, it just returns the default black image.
var canvas = document.getElementById('canvas');
var input = document.getElementById('input');
var ctx = canvas.getContext('2d');
var photo;
function picToBlob() {
var file = input.files[0];
canvas.toBlob(function(blob) {
var newImg = document.createElement("img"),
url = URL.createObjectURL(blob);
newImg.onload = function() {
ctx.drawImage(this, 0, 0);
photo = blob;
URL.revokeObjectURL(url);
};
newImg.src = url;
}, file.type, 0.5);
canvas.renderImage(photo);
}
HTMLCanvasElement.prototype.renderImage = function(blob) {
var canvas = this;
var ctx = canvas.getContext('2d');
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0)
}
img.src = URL.createObjectURL(blob);
}
input.addEventListener('change', picToBlob, false);
【问题讨论】:
-
您在绘制之前调用
canvas.toBlob(在您的canvas.renderImage中,这是异步的顺便说一句),您想知道为什么它会输出透明图像?我会说这是因为您在尝试导出画布时没有在画布上绘制任何内容。 Ps:在你的renderImage,别忘了也撤销URL对象,你可能需要调整你的画布大小。