使用Javascript合并图像

使用Javascript合并图像,javascript,image-processing,image-manipulation,Javascript,Image Processing,Image Manipulation,是否可以使用javascript合并图片 例如,如果您有两个大小相同的矩形.jpg或.png图像文件,是否可以将其并排对齐,并在新的.jpg或.png图像文件中生成这两个文件的合并副本?不,您不能这样做 通过一些css/html魔法,您可以创建并合并 如果你想把它们合并起来,我建议你用Photoshop 或者您可以让一些服务器代码为您创建和合并图像。您可以使用JavaScript将它们“合并”到一个画布中,并将该画布转换为图像 var c=document.getElementById(&qu

是否可以使用javascript合并图片

例如,如果您有两个大小相同的矩形.jpg或.png图像文件,是否可以将其并排对齐,并在新的.jpg或.png图像文件中生成这两个文件的合并副本?

不,您不能这样做

通过一些css/html魔法,您可以创建并合并


如果你想把它们合并起来,我建议你用Photoshop


或者您可以让一些服务器代码为您创建和合并图像。

您可以使用JavaScript将它们“合并”到一个画布中,并将该画布转换为图像

var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
var imageObj1 = new Image();
var imageObj2 = new Image();
imageObj1.src = "1.png"
imageObj1.onload = function() {
   ctx.drawImage(imageObj1, 0, 0, 328, 526);
   imageObj2.src = "2.png";
   imageObj2.onload = function() {
      ctx.drawImage(imageObj2, 15, 85, 300, 300);
      var img = c.toDataURL("image/png");
      document.write('<img src="' + img + '" width="328" height="526"/>');
   }
};
var c=document.getElementById(“myCanvas”);
var ctx=c.getContext(“2d”);
var imageObj1=新图像();
var imageObj2=新图像();
imageObj1.src=“1.png”
imageObj1.onload=函数(){
ctx.drawImage(图像对象J1、0、0、328、526);
imageObj2.src=“2.png”;
imageObj2.onload=函数(){
ctx.drawImage(图像对象J2、15、85、300、300);
var img=c.toDataURL(“图像/png”);
文件。写(“”);
}
};

出于安全考虑,您的两个图像必须与JavaScript文件位于同一个域中(即
http://123.com/1.png
http://123.com/2.png
http://123.com/script.js
)否则函数
toDataURL()
将引发错误。

ỳ新罕布什尔州ốc Phong部分正确:

可以使用画布合并图像。但它们可以来自其他领域。只需将图片加载到dom中。 加载图片后(可以使用javascript检查,请参见下文),您可以在画布中使用它们

var canvas = canvasBuild.getContext('canvasObj');
var img = document.getElementById('mergePic1');
canvas.drawImage(img, 0, 0);

要检查图像是否已加载,我建议使用jQuery插件,但也可以不使用它。

我知道这是一篇老文章,但我自己也曾遇到过这篇文章,寻找这个问题的解决方案。更重要的是,我希望能够上传应该使用的图像(无需依赖服务器端逻辑)

我创造了一把小提琴( )在此基础上:

我接着又加上胡ỳ新罕布什尔州ố上面的方氏逻辑():

HTML:

此外,它结合了一点透明度,只允许使用两个JPEG

请注意,所有图像定位和大小调整都是通过
ctx.drawImage()
函数进行管理的。演示会很难看,但它应该能证明这一概念


希望这是有帮助的

为2019/2020+更新:有一个很棒的npm包,叫做

而且它的用法非常简单

$('.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');
    }
  };
}
您可以进一步自定义它的定位,不透明度(每幅图像)和输出的尺寸


(我与这个软件包没有任何关系,我只是浪费了3天时间让
html2canvas
工作,然后找到了这个救命恩人!)

这是不正确的,正如投票率较高的答案所示。我的意思是,从技术上讲,存在多个JavaScript环境。上面,作者正在使用DOM的API来操作图像。尝试使用纯JavaScript或Node,情况就不同了。例如,有没有不使用Node.js的纯js版本?@lovechillcool您也可以在浏览器中使用
合并图像
包。如果您没有可用的
npm
,可以通过脚本标记将其包括在内:
-Node.js在这里不是必需的。我已经尝试过了。但是不断地得到CORS的错误
$('.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');
    }
  };
}
import mergeImages from 'merge-images';
 
mergeImages(['/body.png', '/eyes.png', '/mouth.png'])
  .then(b64 => document.querySelector('img').src = b64);
  // data:image/png;base64,iVBORw0KGgoAA...