Ich versuche, mit diesem Code einige Bilder im Client-Browser zu laden:
function addFiles()
var input = document.querySelector("input[type='file']");
var files = input.files;
var previewEl = document.getElementById("preview");
for (var i = 0; i < files.length; i++) {
if (!files[i].type.match(/image.*/)) {
alert("This is not image!");
continue;
};
var divEnvelop = document.createElement('div');
divEnvelop.setAttribute('class','imgPrevEnvelop');
divEnvelop.setAttribute('id',"img"+i);
previewEl.appendChild(divEnvelop);
var img = document.createElement("img");
img.file = files[i];
var reader = new FileReader();
reader.onload = (function(aImg, aName, aEnvelop) { return function(e) {
aImg.src = e.target.result;
//here I don't have img.width - problem
createImgCanvas(aImg, aImg.width, aImg.height, 300, 300, aName, aEnvelop);
}; })(img,files[i].name, divEnvelop);
reader.readAsDataURL(files[i]);
}
}
function createImgCanvas(img, imgWidth, imgHeight, width, height, label, divEnvelop) {
if (imgWidth > imgHeight) {
if (imgWidth > width) {
imgHeight *= width / imgWidth;
imgWidth = width;
}
} else {
if (imgHeight > height) {
imgWidth *= height / imgHeight;
imgHeight = height;
}
}
var canvas = document.createElement('canvas');
canvas.setAttribute('id',label);
canvas.width = imgWidth;
canvas.height = imgHeight;
var imageCanvas2D = canvas.getContext("2d");
try{
imageCanvas2D.drawImage(img, 0, 0, imgWidth, imgHeight);
} catch(err) { alert(err);}
divEnvelop.appendChild(canvas);
}
aber es gibt ein Problem in der Funktion reader.onload, bei der ich die Eigenschaft img.width nicht habe. Ist immer noch auf Null gesetzt. Dieses Verhalten ist in Chrome auch, so dass es wahrscheinlich mein Fehler sein. Könnten Sie mir bitte sagen, wo das Problem liegt?
Danke, JV