我正在编写一个小片段,允许用户将图像拖到 div 容器(dropzone)中,然后在该 div 中创建一个画布并将图像绘制到 div 中。但是,这现在确实有效,我根本无法弄清楚。问题是由于某种原因图像被剪裁了。我可以确认图像已正确加载,因为如果我附加图像对象而不是画布,它可以工作!显示整个图像。我也尝试过在drawImage
参数中明确输入宽度和高度,但没有成功。
function drop(e) {
e.stopPropagation();
e.preventDefault();
var dt = e.dataTransfer;
var files = dt.files;
if(files)
readFile(files[0]);
}
function applyDataUrlToCanvas(dataUrl) {
var canvas = document.getElementById('mainCanvas'),
ctx = canvas.getContext("2d");
var img = new Image();
img.src = dataUrl;
img.onload = function() {
ctx.drawImage(img, 0, 0, img.width, img.height);
};
}
//-----------------------------------------------------------------------------
function readFile(file) {
var dropzone = document.getElementById('dropzone');
for (var i = dropzone.childNodes.length - 1; i >= 0; i--) {
dropzone.removeChild(dropzone.childNodes[i]);
}
var canvas = document.createElement('canvas');
canvas.id = 'mainCanvas';
canvas.style.display = "block";
canvas.style.margin = "auto";
dropzone.appendChild(canvas);
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e) {
applyDataUrlToCanvas(this.result);
};
}