Я знаю, что это старый пост, но я сам наткнулся на него, пытаясь найти решение этого вопроса.Более того, я хотел иметь возможность загружать изображения, которые должны использоваться (без необходимости полагаться на логику на стороне сервера).
Я создал скрипку (http://jsfiddle.net/davidwalton/4pjreyfb/6/), которая создаетпо этому вопросу:
Как сделать простую загрузку изображения с использованием Javascript / HTML
Затем я добавил логику Хуана Куна Фонга выше ( Слияние изображений с использованием Javascript ):
HTML:
<input class="file1" type="file" data-image-selector=".image1" />
<input class="file2" type="file" data-image-selector=".image2" />
<br />
<img class="image1 hidden" alt="medium image 1" />
<img class="image2 hidden" alt="medium image 2" />
<br />
<input class="btn-merge" type="button" value="Merge!" />
<br />
<img class="merged-image hidden" alt="merged image" />
<canvas id="canvas" class="hidden"></canvas>
JS:
$('.file1, .file2').on('change', function() {
var reader = new FileReader(),
imageSelector = $(this).data('image-selector');
if (this.files && this.files[0]) {
reader.onload = function(e) {
imageIsLoaded(e, imageSelector)
};
reader.readAsDataURL(this.files[0]);
}
});
$('.btn-merge').on('click', merge);
function imageIsLoaded(e, imageSelector) {
$(imageSelector).attr('src', e.target.result);
$(imageSelector).removeClass('hidden');
};
function merge() {
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
imageObj1 = new Image(),
imageObj2 = new Image();
imageObj1.src = $('.image1').attr('src');
imageObj1.onload = function() {
ctx.globalAlpha = 1;
ctx.drawImage(imageObj1, 0, 0, 328, 526);
imageObj2.src = $('.image2').attr('src');;
imageObj2.onload = function() {
ctx.globalAlpha = 0.5;
ctx.drawImage(imageObj2, 15, 85, 300, 300);
var img = canvas.toDataURL('image/jpeg');
$('.merged-image').attr('src', img);
$('.merged-image').removeClass('hidden');
}
};
}
Кроме того, он включает в себя немного прозрачности, позволяя использовать только два jpeg-файла.
Обратите внимание, что все расположение и размеры изображения управляются с помощью функций ctx.drawImage()
.Демо будет некрасиво, но это должно доказать концепцию.:)
Надеюсь, это полезно!