#javascript #html #jquery
#javascript #HTML #jquery
Вопрос:
Я пытаюсь объединить два изображения на холсте, а затем поместить их в img. функция слияния — это нормально, я думаю, вероятно, это лучший способ сделать, но я думаю, что это хорошо.
Функция, которая должна изменить холст на img, выдает мне сообщение об ошибке :
function merge(){
var img1fil = document.getElementById("img1");
var img2fil = document.getElementById("img2");
var c=document.createElement("canvas");
c.setAttribute("id", "myCanvas");
document.body.appendChild(c);
c.width=100;
c.height=200;
var canva = $("#myCanvas");
var ctx=canva.get(0).getContext("2d");
var imageObj1 = new Image();
var imageObj2 = new Image();
imageObj1.src = img1fil.value;
imageObj1.onload = function() {
ctx.drawImage(imageObj1, 0, 0, 100, 100);
imageObj2.src = img2fil.value;
imageObj2.onload = function() {
ctx.drawImage(imageObj2, 0, 100, 100, 100);
}
};
}
function lodzer(){
var canvab = $("#myCanvas");
var dataURL = canvab.get(0).toDataURL("image/png");
var img = $("<img></img>");
img.crossOrigin = "anonymous";
img.setAttribute("src", dataURL);
img.setAttribute('crossOrigin','anonymous');
document.getElementById("myCanvas").replaceWith(img);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="img1"/>
<input type="text" id="img2"/>
<img id='imouge'>
<button onclick="merge()">Click me</button>
<button onclick="lodzer()">Click me</button>
Ответ №1:
crossOrigin
Для изображений в canvas необходимо установить значение anonymous —
function merge() {
var img1fil = document.getElementById("img1");
var img2fil = document.getElementById("img2");
var c = document.createElement("canvas");
c.setAttribute("id", "myCanvas");
document.body.appendChild(c);
c.width = 100;
c.height = 200;
var canva = $("#myCanvas");
var ctx = canva.get(0).getContext("2d");
var imageObj1 = new Image();
var imageObj2 = new Image();
imageObj1.src = img1fil.value;
imageObj1.crossOrigin = "anonymous";
imageObj1.onload = function() {
ctx.drawImage(imageObj1, 0, 0, 100, 100);
imageObj2.src = img2fil.value;
imageObj2.crossOrigin = "anonymous";
imageObj2.onload = function() {
ctx.drawImage(imageObj2, 0, 100, 100, 100);
}
};
}
function lodzer() {
var canvab = $("#myCanvas");
var dataURL = canvab.get(0).toDataURL("image/png");
var image = new Image();
image.src = dataURL;
image.crossOrigin = "anonymous";
canvab.replaceWith(image);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="img1" />
<input type="text" id="img2" />
<img id='imouge'>
<button onclick="merge()">Click me</button>
<button onclick="lodzer()">Click me</button>
Комментарии:
1. Отлично, кажется, это работает. С другой стороны, теперь изображения больше не загружаются на холст.
2. @HuecoMundoPRODUCTION, что вы подразумеваете под «изображения больше не загружаются в холст»?
3. Доступ к изображению в ‘ ssl.gstatic.com/onebox/media/sports/logos /… ‘ из источника ‘ localhost:8765 ‘ заблокирован политикой CORS: заголовок ‘Access-Control-Allow-Origin’ отсутствует на запрошенном ресурсе. Вероятно, это нормально для локального, нет?
4. @HuecoMundoPRODUCTION, возможно, это связано с сервером, на котором размещено изображение. Потому что он работает с этим URL- адресом — picsum.photos / id/1/200/300