Javascript/jQuery: удалить форму/путь из холста

Я не могу найти функцию для удаления формы или пути из холста после его создания.

Итак, я создаю кривую безье между двумя точками с помощью

beginPath();
bezierCurveTo();
stroke();
closePath();

Как я могу удалить это из холста после его создания? Мне нужно вызвать функцию удаления с помощью toggle() и blur(). Я уверен, что что-то существует для этого...

Заранее благодарим за помощь!

Ответы

Ответ 1

Спасибо за отличный вклад для всех вас - это помогло мне найти решение:

context.clearRect(x,y,w,h);

(ссылка)

Это очистит все, что находится внутри этого прямоугольника.

Я нашел метод на странице, которую я нашел, копая для ответа ILog, чтобы сохранить/восстановить контекст, и все это там. Еще раз спасибо.

Ответ 2

Попробуйте следующее:

ctx.save();
ctx.globalCompositeOperation = "destination-out";
// drawing here you path second time
ctx.restore();

"Атрибут globalCompositeOperation устанавливает, как формы и изображения нарисованы на растровом изображении нуля specs

Как это работает, вы можете увидеть здесь.

Ответ 3

Это важно понять о <canvas>. Это сглаженное изображение, состоящее из пикселей. Как только что-то нарисовано, оно слилось в сетку пикселей и не может быть отделено от других пикселей.

Если вам нужно отделить элементы изображения, вы могли бы:

  • Наложение элементов <canvas> в стек слоев
  • Используйте <svg>, в котором каждый визуальный элемент отличается от других элементов и может управляться независимо.

Вы можете представить <canvas> как один слой в PhotoShop/Gimp/Fireworks или документ MSPaint.

Вы можете представить <svg> как документ в Illustrator/InkScape.

Ответ 4

Вы не можете удалить путь/форму из холста. Вы можете нарисовать что-то еще над ним или очистить полотно.

Ответ 5

Вы можете попробовать использовать SVG вместо холста. Там есть фантастическая библиотека под названием Raphaël, которая делает работу с SVG ветерок. Он также работает во всех браузерах, включая IE6.

С SVG каждая форма - это ее собственный элемент, который можно перемещать, преобразовывать или удалять.

Ответ 6

Чтобы очистить холст, используйте следующий код

    canvas_context.clearRect(0,0,canvas_1.width,canvas_1.height);

Всегда используйте метод beginPath, когда вы начнете рисовать новый путь и метод closePath после того, как закончите рисовать свой путь.

ПРИМЕЧАНИЕ. Контуры, которые не закрыты, не могут быть очищены.

Если ваши пути не очищаются, это должно быть из-за вышеуказанной причины.

Все пути ДОЛЖНЫ начинаться с beginPath() и заканчиваться на closePath()

Пример:

     canvas_context.beginPath();
     canvas_context.moveTo(x1,y1);
     canvas_context.lineTo(x2,y2);
     canvas_context.stroke();
     canvas_context.closePath();

Следующий код также очищает ваш холст

    canvas_1.width = canvas_1.width;

ПРИМЕЧАНИЕ.. Вышеприведенный оператор повторно инициализирует холст, и он очищает холст. Любое утверждение, которое повторно инициализирует холст, очистит полотно.

Ответ 7

Насколько я помню спецификацию, вы должны вызвать context.save() перед рисованием, затем нарисуйте что-нибудь, а затем вызовите context.restore(), чтобы вернуться в предыдущее состояние.

Ответ 8

Если вы используете JQuery:

var elem = $("selector");
var canvas = elem.get(0);
var context = canvas.getContext("2d");

context.clearRect(0, 0, canvas.width, canvas.height);
context.beginPath();

Замените "селектор" на ваш фактический селектор JQuery.