質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

Q&A

0回答

1009閲覧

複数枚重なったcanvasで透明領域のマウスイベントを見えている直下の要素に渡したい

lexuzon

総合スコア23

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Fabric

Pythonで書かれたデプロイ・システム管理ツール。シンプルで始めやすいのが特徴です。 シェルスクリプトに慣れている人には親しみやすい管理ツールと言えます。 同様のツールにCapistranoがあります。

0グッド

0クリップ

投稿2019/01/24 15:32

お世話になっております。

Fabric.js で画像編集ツールを作成しようとしています。

背景を透過したpngファイルの塗りつぶし部分で写真画像をクリッピングし、マウスのクリックイベントで各クリップした画像を拡大、回転等編集したいのですが、透過pngファイル全体が選択範囲となってしまい最上部のレイヤーのみ編集可能な状態で困っています。

透過pngファイルの一部(透過していない部分)のみを選択可能とし透明部分は無いものとし下のcanvas に継承するにはどうしたら良いでしょうか。

クリッピング用の図形を座標指定で描く方法ですと、背景とマスクの位置合わせが困難ですので、
同一サイズの画像をクリッピングマスクにする仕様にしています。
canvasレイヤーは現在2層ですが、4層、5層と増やす形となります。

どなたかご教授いただければ幸いに存じます。

css

1 .canvas-container { 2 position: absolute; 3 left: 0; 4 top: 0; 5 }

html

1<canvas id="c" class="canvas" width="600" height="500" style="border:1px solid #ccc"></canvas> 2<canvas id="d" class="canvas" width="600" height="500" style="border:1px solid #ccc"></canvas>

javascript

1 2<script id="main">(function() { 3 4 5var canvas = new fabric.Canvas('c'); 6 7fabric.Image.fromURL('http://fabricjs.com/assets/2.svg', function(img){ 8 img1 = img; 9 fabric.Image.fromURL('http://fabricjs.com/assets/pug.jpg', function(img){ 10 img1.scaleToWidth(canvas.getWidth()); 11 img1.selectable = false; 12 img2 = img; 13 img2.scaleToHeight(300); 14 img2.left = 50; 15 img2.top = 50; 16 img2.globalCompositeOperation = 'source-atop'; 17 canvas.add(img1); 18 canvas.add(img2); 19 }); 20}); 21 22 23var canvas2 = new fabric.Canvas('d'); 24 25fabric.Image.fromURL('canvas/imgs/masque2.png', function(ly2){ 26 img3 = ly2; 27 fabric.Image.fromURL('http://anessa.shiseido.co.jp/uploads/2018/02/howto_baby_main.jpg', function(ly2){ 28 img3.scaleToWidth(300); 29 img3.selectable = false; 30 img4 = ly2; 31 img4.scaleToHeight(300); 32 img4.left = 50; 33 img4.top = 50; 34 img4.globalCompositeOperation = 'source-atop'; 35 canvas2.add(img3); 36 canvas2.add(img4); 37 }); 38}); 39 40 41 42})(); 43</script>

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問