Я пытаюсь объединить два холста HTML в один холст, а затем загрузить их в качестве изображения. Мой код, как показано ниже:Объединить несколько холстов и загрузить как изображение
function downloadCanvas() {
var bottleCanvas = document.getElementById('bottleCanvas');
var designCanvas = document.getElementById('editorCanvas');
var bottleContext = bottleCanvas.getContext('2d');
bottleContext.drawImage(designCanvas, 69, 50);
var dataURL = bottleCanvas.toDataURL("image/png");
var link = document.createElement('a');
link.download = "bottle-design.png";
link.href = bottleCanvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
link.click();
}
Моя проблема здесь, кажется, следующая строка:
bottleContext.drawImage(designCanvas, 69, 50);
Это, как предполагается рисовать содержимое одного полотна на другое, что он делает, но потом предотвращает запуск и загрузку последней части кода. Когда я удаляю эту конкретную строку, функция загрузки работает нормально, но, к сожалению, загружает только одну из холстов.
Таким образом, мой вопрос: или что я здесь делаю неправильно? или Как мне объединить два холста HTML, а затем загрузить их в качестве изображения.
(На другой ноте, мой выше код для загрузки хорошо работает только в Chrome - в других браузерах я не могу установить имя файла и установить расширение файла.)
Благодарим за это. Но нет ли способа разрешить размещение одного изображения извне? БутылкаCanvas использует изображение, хранящееся локально, тогда как editorCanvas использует изображение, хранящееся в ведре S3, так как оно будет отличаться для каждого пользователя. –
Невозможно обойти защиту от перекрестного происхождения - вы должны соблюдать ее. Если «локально» хранится на вашем локальном жестком диске (в отличие от каталога на обслуживаемом веб-сайте), тогда это изображение «испортит» ваш холст. Изображения S3 ** могут быть выполнены в соответствии с ограничениями на перекрестную защиту **, но они не делают это из коробки. Я добавил к моему ответу, объяснив больше об этом. Удачи с вашим проектом. – markE