Подтвердить что ты не робот

Объединить изображение с помощью Javascript

Можно ли объединить изображения с помощью javascript?

Например, если у вас есть 2 прямоугольника .jpg или .png файлы изображений того же размера, возможно ли, что вы можете выровнять его бок о бок и создать объединенную копию этих двух в новой .jpg или .png файл изображения?

4b9b3361

Ответ 1

Вы можете использовать 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"/>');
   }
};

Из-за безопасности ваши два изображения должны находиться в одном домене с вашим файлом JavaScript (например, http://123.com/1.png, http://123.com/2.png и http://123.com/script.js), в противном случае функция toDataURL() вызовет ошибку.

Ответ 2

Huỳnh Quốc Phong частично прав:

Вы можете использовать Canvas для объединения изображений. Но они могут происходить из других доменов. Просто загрузите изображения в свой дом. Как только изображения загружаются (можно проверить с помощью javascript, см. Ниже), вы можете использовать их в своем холсте.

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

Чтобы проверить, загружены ли изображения, я бы рекомендовал использовать плагин jQuery http://desandro.github.io/imagesloaded/ - но это также можно сделать без него.

Ответ 3

Вы можете использовать библиотеку Pixastic JavaScript для объединения, фильтрации и объединения нескольких изображений. http://www.pixastic.com/lib/docs/actions/blend/

Но это работает только в современных браузерах, поддерживающих Canvas-элемент. К сожалению, IE8 не поддерживает это.

Ответ 4

Я знаю, что это старый пост, но я наткнулся на него, ища решение этого вопроса сам. Даже более того, я хотел иметь возможность загружать изображения, которые следует использовать (без необходимости полагаться на логику на стороне сервера).

Я создал скрипку (http://jsfiddle.net/davidwalton/4pjreyfb/6/), которая основывается на этом:

Как сделать загрузку простого изображения с помощью Javascript/HTML

Затем я добавил логику Huỳnh Quốc Phong выше (Merge Image с помощью 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');
    }
  };
}

Кроме того, он включает в себя немного прозрачности только для использования двух jpegs.

Обратите внимание, что все позиционирование и размер изображения управляются с помощью ctx.drawImage(). Демонстрация будет уродливой, но она должна доказать эту концепцию. :)

Надеюсь, это полезно!

Ответ 5

Нет, вы не можете этого сделать.

С помощью некоторой css/html магии вы можете сделать, тогда будет отображаться.


Если вы хотите, чтобы они фактически слились, я бы предложил Photoshop.

Или вы можете создать код сервера и объединить изображения для вас.