Чтобы вырезать изображение в Canvas

У меня есть изображение в Canvas.

const canvas = document.createElement('canvas')
canvas.width = 640
canvas.height = 480
const context = canvas.getContext('2d')
element.appendChild(canvas)
const imageData = context.createImageData(640, 480)
imageData.data.set(new Uint8ClampedArray(data.frame))
context.putImageData(imageData, 0, 0)

Я получаю данные (высота, ширина, x, y). Я хочу вырезать изображение из холста по этим данным и сохранить его как blob-файл. Как я могу это сделать?

Возможный дубликат stackoverflow.com/questions/26015497/… (по крайней мере, для вырезанной части; как получить это пятно после этого, вы должны исследовать сами).

04FS 15.03.2019 13:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
572
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш вопрос не ясен. Пример кода не соответствует описанию проблемы. Поскольку пример кода не работает (неопределенная переменная data), я могу только пойти по описанию проблемы.

I receive data (height, width, x, y). I want to cut an image from the canvas according to this data and save it as a blob-file. How can I do this?

Вырезать из изображения

Вырезать прямоугольную область из холста

function cutArea(fromImage, x, y, width, height) {
    const cut = document.createElement("canvas");
    cut.width = width;
    cut.height = height;
    const ctx = cut.getContext("2d");
    ctx.drawImage(fromImage, -x, -y);
    return cut;
}

Вы должны использовать offscreenCanvas, но поддержка ограничена, поэтому добавьте его, если вы знаете, каковы ваши цели. Создание выреза Canvas за кадром

function cutArea(fromImage, x, y, width, height) {
    const cut = new OffscreenCanvas(width, height);
    const ctx = cut.getContext("2d");
    ctx.drawImage(fromImage, -x, -y);
    return cut;
}

Примечание

  • Проверяет, что масштаб пикселей неизменен и нет границ. Часть или все вырезанное изображение может быть пустым (0 альфа), если координаты не лежат на исходном изображении.
  • fromImage может быть любым допустимым источником изображения, включая холст.
  • width и height должны быть > 0, иначе функции выдадут ошибку.

Скачать

Чтобы загрузить вырезку в локальное хранилище в виде загруженного файла изображения "image/png". Примечание. Имя файла может быть изменено пользователем при загрузке. Тип изображения по умолчанию png. Невозможно узнать, прошла ли загрузка успешно.

function downloadCut(cut, name) {
    const a = document.createElement("a");
    a.download = name + ".png"; 
    const download = blob => {
        const url = a.href = URL.createObjectURL(blob);
        a.dispatchEvent(new MouseEvent("click", {view: window, bubbles: true, cancelable: true})); 
        setTimeout(() => URL.revokeObjectURL(url), 1000); // clean up 
    }
    if (cut instanceof OffscreenCanvas) { cut.convertToBlob().then(download) }
    else { canvas.toBlob(download) }
}
    

Другие вопросы по теме