Arhn - архитектура программирования

Фоновое изображение не отображается на загруженном холсте HTML5 PNG

У меня есть 3 входных фоновых изображения, которые меняются при нажатии и заполняют область холста. Я загружаю другие изображения через ввод файла, размещая его поверх изображения bg. Когда я сохраняю холст в формате PNG, все изображения, кроме фонового изображения, отображаются. Я хочу, чтобы все изображения на холсте отображались и сохранялись в формате PNG.

Любая информация по этому вопросу будет принята с благодарностью :-)

jsfiddle

JavaScript:

// Buttons onclick change background image of canvas
$(document).ready(function() {
  $("#canvascolor > input").click(function() {
    var img = $(this).attr('src');
    $('#myCanvas').css("background-image", "url(" + img + ")");
  });
});
// END Buttons onclick background image of canvas

var canvas = new fabric.Canvas('myCanvas', {
  backgroundColor: 'transparent'
});

function renderImage(e) {
  var imgUrl = URL.createObjectURL(e.target.files[0]);
  fabric.Image.fromURL(imgUrl, function(img) {
    // set default props
    img.set({
      width: 150,
      height: 150,
      top: 75,
      left: 75,
      transparentCorners: false
    });
    canvas.add(img);
    canvas.renderAll();
  });
}

function saveOnPC() {
  var link = document.createElement('a');
  link.href = canvas.toDataURL();
  link.download = 'myImage.png';
  link.click();
}

function click(el) {
  // Simulate click on the element.
  var evt = document.createEvent('Event');
  evt.initEvent('click', true, true);
  el.dispatchEvent(evt);
}

document.querySelector('#fileSelect').addEventListener('click', function(e) {
  var fileInput = document.querySelector('#fileElem');
  //click(fileInput); // Simulate the click with a custom event.
  fileInput.click(); // Or, use the native click() of the file input.
}, false);

$('#remove').click(function() {
  var object = canvas.getActiveObject();
  if (!object) {
    alert('Please select the element to remove');
    return '';
  }
  canvas.remove(object);
});

HTML:

<canvas id="myCanvas" width="400" height="800"></canvas>
<section id="canvascolor">
   <input id="bostonblue" class="canvasborder" type="image" src="https://s26.postimg.org/i3ibods55/blue.jpg">
   <input id="bostonblack" class="canvasborder" type="image" src="https://s26.postimg.org/vlp803yzd/black.jpg">
   <input id="bostonamber" class="canvasborder" type="image" src="https://s26.postimg.org/o5pyeao4p/amber.jpg">
 </section>
20.02.2018

Ответы:


1

Вместо установки фонового изображения через css установите фоновое изображение холста с помощью canvas.setBackgroundImage()< /а>

$("#canvascolor > input").click(function () {
    var img = $(this).attr('src');
    canvas.setBackgroundImage(img,canvas.renderAll.bind(canvas));
});
20.02.2018
  • Да, эта функция отлично работает в другой версии этого, но независимо от того, где я размещаю этот код, я больше не могу сохранять холст как изображение. Моя другая версия этого холста использует загрузку файла (пользовательский ввод) для добавления изображения bg, и я хочу изменить изображения bg с собственным размещением на холст по щелчку. Знаете ли вы, как заставить этот код работать для ввода изображения (3 из них) вместо ввода файла? У меня есть код и скрипка. jsfiddle.net/carolynrue/q7Z9k/1340/ 21.02.2018
  • Привет, скрипка работает - она ​​делает то, что от нее требуется: выберите статическое фоновое изображение, фоновое изображение появляется на моем холсте при нажатии на изображение, но только с загрузкой пользователя - у меня есть фоновые изображения на моем сервере, я хочу пользователю на выбор. это моя проблема 21.02.2018
  • @crue Проверьте, не возникает ли у вас проблема с cors при выполнении canvas.toDataURL() 21.02.2018
  • Спасибо за предложение. Я использую PostImage для размещения своих изображений. Как проверить наличие CORS? 21.02.2018
  • Я проверил корс: Статус XHR: 200 Текст статуса XHR: ОК 21.02.2018
  • @crue вы получаете ошибку при сохранении? Проверить консоль 21.02.2018
  • Я не знаю, как использовать локальные изображения на jsfiddle 21.02.2018
  • @crue 3 of them что ты имеешь в виду, я сейчас в замешательстве и не могу понять, какие ошибки ты получаешь. 21.02.2018
  • Прошу прощения за то, что ввел вас в заблуждение. У меня есть две разные скрипки: одна будет отображать изображение bg при сохранении, а другая - нет. Я подумал, что если я изменю функцию, которая работает с типом ввода файла, на тип ввода изображения, тогда она может работать. 21.02.2018
  • @crue Если вы не хотите сохранять фоновое изображение, удалите его при сохранении и добавьте снова после сохранения. 21.02.2018
  • Я объединил их в одну скрипку. метод загрузки файла (первая кнопка «фон») сохраняет bg, группа кнопок (нижние кнопки) при нажатии - нет. jsfiddle.net/carolynrue/q7Z9k/1462 21.02.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..