Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   <canvas> маска для картинки методом Clip() (https://javascript.ru/forum/misc/67043-canvas-maska-dlya-kartinki-metodom-clip.html)

provigator 24.01.2017 17:59

<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

Dilettante_Pro 24.01.2017 19:14

provigator,
Попробуйте в качестве маски png с прозрачным фоном

provigator 24.01.2017 20:14

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)
}

выводится маска...


Часовой пояс GMT +3, время: 01:28.