2016-03-03 4 views
1

Я хочу сделать отверстие внутри многоугольника с fabricjs. Я могу сделать это с использованием обычного холста html5 против часовой стрелки, как показано ниже, но я бы предпочел сделать это с помощью fabricjs. Кто-нибудь знает, как реализовать прикрепленное изображение с помощью «fabriicjs»?Как сделать отверстие в polyjon fabricjs

Как это:

enter image description here

+0

html5 холст может быть источником изображения для 'Fabric.Image'. Чтобы это было просто, если вы можете нарисовать свою форму желания на холсте html5, сделайте это и создайте Fabric.Image с холста. – markE

+0

@markE .. Нет .. Я хочу создать полигон программно с отверстиями. У меня есть точка координат для многоугольника и его отверстий. как это сделать ..? –

+0

Понял! AFAIK, FabricJS пока не поддерживает композицию, необходимую для создания вырезов из своих полигонов. Мой комментарий - обходной путь, и я опубликовал информацию о реализации в ответе. Ура! – markE

ответ

1

Вот один из способов сделать вырез-многоугольник на FabricJS:

AFAIK, FabricJS еще не поддерживают композитинга необходимо создать вырезы из своих полигонов , так что обходной путь.

  1. Нарисуйте многоугольник выреза на холсте html5. For example

    • Нарисуйте многоугольник из указанных вами точек.
    • .globalCompositeOperation='destination-out'. Это приведет к тому, что все новые чертежи будут действовать как «ластик» и вырезают любые существующие пиксели под новыми чертежами.
    • Нарисуйте вырез из указанных вами точек.
  2. Используйте html5-холст в качестве источника изображения для нового Fabric.Image.

    // Create your polygon with transparent cuts on this html5 canvas 
    // Use destination-out compositing to "punch holes" in your polygon 
    var html5canvas=document.getElementById('myhtml5CanvasElement'); 
    
    // then use the html5 canvas as an image source for a new Fabric.Image 
    var c=new Fabric.Image(html5Canvas); 
    
+0

это хорошая идея, но некоторые проблемы здесь .. можно сделать полигон для изображения с холста. если возможно, приведи пример. то «destination-out» делает только белый наложение на объект. но я хочу, чтобы этот прозрачный вырез. моя попытка [здесь] (http://codepen.io/anon/pen/GZpdLj) –

+0

Как я уже сказал в своем ответе, FabricJS не поддерживает компоновку, поэтому вы должны создавать композицию на обычном холсте html5 и использовать этот холст в качестве изображения источник для вашего Fabric.Image. У вас будет Fabric.Image, содержащий ваш полигон, и 2 выреза будут прозрачными. [Здесь] (https://dl.dropboxusercontent.com/u/139992952/multple/poly%20with%20cutout.png) пример изображения. ** Композиция «Назначение» превращает пикселы в прозрачные. ** Таким образом, выбирая ваши пути вырезания с композицией «выход-выход» будет «пробивать прозрачные отверстия» в вашем более крупном полигоне. – markE

+0

благодарит @markE за ваше драгоценное время для этого. Я понимаю концепцию. танков еще раз –

Смежные вопросы