Я беру список файлов, сброшенных в этом районе.а затем получить их dataUrl и положить их в Img.а затем положить это изображение на холсте, используя drawImage
.Я делаю соответствующее масштабирование изображений в соответствии с их размером.Его функционирование должным образом.Но проблема даже после завершения операции.например, долго после того, как Canvas были добавлены к процессору dom, и использование памяти становится высоким.просто чтобы показать холст, требуется высокая загрузка процессора и памяти.
Код внутри события перетаскивания:
e.preventDefault();
$("#controller_search").attr('value', '^')
$("#controller_search").attr('disabled', 'disabled');
$("#imageList").html('');
var templateData = "\
<div class='imageviewer-up'> \
<div class='curtain'></div> \
<canvas class='canvas'></canvas> \
<div class='loading'>0%</div> \
</div> \
";
for(var i=0;i<event.dataTransfer.files.length;++i){
var file = event.dataTransfer.files[i];
var reader = new FileReader();
reader.onload = (function(file){
return function(e){
var template = $(templateData);
var image = new Image();/*template.find('img')[0];*/
image.onload = (function(image){
return function(){
var size = {height: image.height, width: image.width}
var rSize = size;
if(size.height > 175)
rSize = {height: 175, width: (175*size.width)/size.height}
else{
rSize = {height: 175/(size.width/size.height), width: size.width/(size.width/size.height)}
}
image.height = rSize.height;
image.width = rSize.width;
var canvas = template.find('canvas')[0];
var context = canvas.getContext("2d");
context.mozImageSmoothingEnabled = true;
canvas.height = 175+4;
canvas.width = image.width+4;
context.drawImage(image, (canvas.height-image.height)/2, 2, image.width, image.height);
template.css('height', 175+4+0);
template.css('width', image.width+0);
}
})(image)
image.src = e.target.result;
image.title = file.name;
console.log(file.name);
$("#imageList").append(template);
image = null;
}
})(file);
reader.readAsDataURL(file);
}
В настоящее время я тестирую, перетаскивая 20 изображений (до 45 МБ), чтобы создать 20 холстов.Это слишком много?
EDIT
Я даже тестировал использование IMG вместо canvas.например, используя IMG только с dataUrls.Но и так тоже.замедляется таким же образом.Так есть ли утечка памяти в моем коде?