html5 canvas を使用して画像アップロード ギャラリーを作成しようとしています。クライアント側で画像のサイズを変更してプレビューを表示しようとしています。しかし、それぞれ 5 MB のような大きなサイズの複数の画像をアップロードすると、ブラウザが停止し、時々クラッシュします。flickr でチェックしたので、アップロードした写真の数に関係なく、ブラウザに負荷をかけずに、システムがアップロードされた画像のサイズを即座に変更しました。さらに、サイズを変更するとサムネイルの品質が低下し、改善するために何かをすると、ブラウザの負荷が急増します。画像のプレビューとサイズ変更のための私のコードは次のとおりです
$(document).ready(function() {
if (window.File && window.FileReader && window.FileList && window.Blob) {
document.getElementById('getfiles').onchange = function(){
var files = document.getElementById('getfiles').files;
for(var i = 0; i < files.length; i++) {
resizeAndUpload(files[i]);
}
};
} else {
alert('The File APIs are not fully supported in this browser.');
}
function resizeAndUpload(file) {
var reader = new FileReader();
reader.onloadend = function() {
var tempImg = new Image();
tempImg.src = reader.result;
tempImg.onload = function() {
var MAX_WIDTH = 220;
var MAX_HEIGHT = 120;
var tempW = tempImg.width;
var tempH = tempImg.height;
if (tempW > tempH) {
if (tempW > MAX_WIDTH) {
tempH *= MAX_WIDTH / tempW;
tempW = MAX_WIDTH;
}
} else {
if (tempH > MAX_HEIGHT) {
tempW *= MAX_HEIGHT / tempH;
tempH = MAX_HEIGHT;
}
}
var canvas = document.createElement('canvas');
canvas.width = tempW;
canvas.height = tempH;
var ctx = canvas.getContext("2d");
ctx.drawImage(this, 0, 0, tempW, tempH);
var dataURL = canvas.toDataURL("image/jpeg");
var newImgs = new Image();
newImgs.src = dataURL;
document.body.appendChild(newImgs);
}
}
reader.readAsDataURL(file);
}