我目前正在构建一个应用程序,用户可以在其中同时上传多个图像并使用它们。由于一些进程由于大图像文件而表现不佳,我想在用户获得它们之前调整它们的大小。如何使用img.onload返回函数?
在我的resizer()
函数中,我尝试使用画布调整大小。它可以工作,但由于'canvas.toDataURL()'在img.onload
函数中,所以我不知道如何返回值并将其解析为handleFiles()
函数。
而且......我尝试了一些案件中,我从handleFiles()
一些代码 - 这样的:
var preview = document.getElementById("img"+count);
var surface = document.getElementById("cubface"+count);
var count = counterImg();
preview.src = resizer(e.target.result, count);
surface.src = resizer(e.target.result, count);
,并把它们在img.onload
函数的最后像
var preview = document.getElementById("img"+number);
var surface = document.getElementById("cubface"+number);
preview.src = canvas.toDataURL;
surface.src = canvas.toDataURL;
我获得了调整大小,但是我只获取了要处理的循环中的最后一幅图像。
所以问题是:
在
resizer()
功能,如何返回canvas.toDataURL
值是img.onload
?为什么循环仅覆盖最后一个实例而不是每个图像以及如何解决这个问题?
全码:
的JavaScript:
function resizer(base64, number){
// Max size for thumbnail
if(typeof(maxWidth) === 'undefined') maxWidth = 1200;
if(typeof(maxHeight) === 'undefined') maxHeight = 1200;
var img = new Image();
img.src = base64;
// Create and initialize two canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var canvasCopy = document.createElement("canvas");
var copyContext = canvasCopy.getContext("2d");
img.onload = function() {
// Determine new ratio based on max size
var ratio = 1;
if (img.width > maxWidth)
ratio = maxWidth/img.width;
else if (img.height > maxHeight)
ratio = maxHeight/img.height;
// Draw original image in second canvas
canvasCopy.width = img.width;
canvasCopy.height = img.height;
copyContext.drawImage(img, 0, 0);
// Copy and resize second canvas to first canvas
canvas.width = img.width * ratio;
canvas.height = img.height * ratio;
ctx.drawImage(canvasCopy, 0, 0, canvasCopy.width, canvasCopy.height, 0, 0, canvas.width, canvas.height);
return canvas.toDataURL();
};
return img.onload;
}
function handleFiles(files) {
for (var i = 0; i < files.length; i++) {
var file = files[i];
var count = counterImg();
var preview = document.getElementById("img"+count);
var surface = document.getElementById("cubface"+count);
var reader = new FileReader();
reader.onload = (function (preview, surface) {
return function (e) {
var newimage = resizer(e.target.result, count);
preview.src = newimage;
surface.src = newimage;
$('#image-cropper'+count).cropit('imageSrc', e.target.result);
}
})(preview, surface);
reader.readAsDataURL(file);
}
}
你肯定在$('#图像栽跟头'+ count)变量数的范围是否正确?您可能想将其添加到您的功能(预览,表面)。 – user3220633
它只是这个功能: 'var j = 0; function counterImg(){ j ++; return j; }' – PLAYCUBE