Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.01.2017, 17:59
Аспирант
Отправить личное сообщение для provigator Посмотреть профиль Найти все сообщения от provigator
 
Регистрация: 20.01.2017
Сообщений: 32

<canvas> маска для картинки методом Clip()
есть 2 фигуры:
circle = new Image()
	circle.src = 'circle.png' 	
circle.onload = function() {
	ctx.rect(0, 0, 100, 100) // рисуем квадрат
	ctx.stroke()
	ctx.drawImage(circle, 75, 0) // выводим круг
}



маскируем круг квадратом, методом Clip() :
circle = new Image()
	circle.src = 'circle.png' 
circle.onload = function() {
	ctx.rect(0, 0, 100, 100)
	ctx.stroke()
	ctx.clip()
	ctx.drawImage(circle, 75, 0)
}

метод работает


загружаем 2 картинки:
square = new Image()
	square.src = 'square.png' 
	circle = new Image()
	circle.src = 'circle.png' 
circle.onload = function() {
	ctx.drawImage(square, 0, 0)	// выводим квадрат
	ctx.drawImage(circle, 75, 0) // выводим круг
}



маскируем круг квадратом:
square = new Image()
	square.src = 'square.png' 
	circle = new Image()
	circle.src = 'circle.png' 
circle.onload = function() {
	ctx.drawImage(square, 0, 0)	
	ctx.clip()
	ctx.drawImage(circle, 75, 0)
}

в результате выводится маска


возможно ли в качестве маски указать картинку PNG ?
или метод работает только с объектами rect(), arc() и т.п.

http://stackoverflow.com/questions/1...ng-overlapping
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2017, 19:14
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

provigator,
Попробуйте в качестве маски png с прозрачным фоном
Ответить с цитированием
  #3 (permalink)  
Старый 24.01.2017, 20:14
Аспирант
Отправить личное сообщение для provigator Посмотреть профиль Найти все сообщения от provigator
 
Регистрация: 20.01.2017
Сообщений: 32

2 картинки PNG с прозрачным фоном:
blue = new Image()
	blue.src = 'blue.png' 
	orange = new Image()
	orange.src = 'orange.png' 
orange.onload = function() {
	ctx.drawImage(blue, 0, 0)	
	ctx.drawImage(orange, 75, 0)
}



маскируем оранжевый круг синим:
blue = new Image()
	blue.src = 'blue.png' 
	orange = new Image()
	orange.src = 'orange.png' 
orange.onload = function() {
	ctx.drawImage(blue, 0, 0)	
	ctx.clip()
	ctx.drawImage(orange, 75, 0)
}

выводится маска...
Ответить с цитированием
  #4 (permalink)  
Старый 24.01.2017, 22:13
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

provigator, clip() работает только с контуром (path). Есть методы для примитивных контуров rect(), arc(), и есть методы для создания контуров произвольной формы beginPath(), moveTo(), closePath(), lineTo(), quadraticCurveTo(), bezierCurveTo(), arcTo(). Контур сам по себе не отображается, его можно либо обвести stroke(), либо закрасить fill(), либо усечь clip() область рисования до его размеров и формы (изначально область рисования определена всей поверхностью холста). Обозначим контур усечения:
ctx.beginPath();
ctx.arc(50, 50, 50, 0, 2 * Math.PI);
ctx.drawImage(blue, 0, 0);
ctx.clip();
ctx.drawImage(orange, 75, 0);

В твоем же случае, вызов clip() на неопределенном контуре видимо порождает усечение области рисования до минимума, в связи с чем последующие изменения на холсте не видны.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите со скриптом для уменьшения картинки Arkinsstoun jQuery 3 07.02.2012 22:18
JS для перегрузки картинки sivsoft Элементы интерфейса 2 29.01.2011 19:57
параметр "width" для рандомной картинки Demska Элементы интерфейса 1 12.09.2010 19:14
Картинки для сайта mycoding (X)HTML/CSS 1 13.04.2010 09:52