如何将两个图像连接在一起?没有任何框架,只有JS

时间:2019-06-05 11:26:24

标签: javascript jquery input ecmascript-6 concatenation

我需要一些有关代码审查的帮助,并将其从jQuery重新转换为纯JS。

我试图将其转换为纯JS,但是我不清楚为什么它不起作用。如果需要,我可以展示自己的作品。

  1. 用户从第一个输入中选择图像后,应将其呈现在画布上。
  2. 用户从第二个输入中选择一个图像后,应将其呈现在第一幅图像右侧的同一画布上。
  3. 图像应按比例绘制,因此两张图片在画布上的高度相同,但具有原始的宽高比。
  4. 用户可以按任何顺序选择图像,但是渲染顺序应保持不变:来自第一个输入的图像出现在画布上,位于来自第二个输入的图像之前。
  5. 输入内容只能接受图像。
$('.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');
    }
  };
}

1 个答案:

答案 0 :(得分:0)

您应该在更改源之前定义onload,而不是在另一个onload内部

function merge() {
  var canvas = document.getElementById('canvas'),
    ctx = canvas.getContext('2d'),
    imageObj1 = new Image(),
    imageObj2 = new Image();

  imageObj1.onload = function() {
    ctx.globalAlpha = 1;
    ctx.drawImage(imageObj1, 0, 0, 328, 526);
  }
  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');
  }
  imageObj1.src = $('.image1').attr('src');
  imageObj2.src = $('.image2').attr('src');
}