javascript html5キャンバスを使用してポリゴンを作成し、カラーの代わりにイメージを表示する方法はありますか?HTML5キャンバス、イメージオン/ポリゴン可能ですか?
答えて
いくつかの研究の後、私はそれが最初fillStyle
にそのパターンを設定し、その後、自分の画像を使用してパターンを作成することであることを行うことは可能だと信じ:
var ctx = canvas.getContext("2d");
var pattern = ctx.createPattern(imageObj, "repeat");
ctx.fillStyle = pattern;
そして、それはmoveTo
を使用して(あなたのポリゴンを作成するだけですlineTo
)、それを通常どおりに充填してください。
ソース:this pluginのソースコード。免責事項:それが動作することを確認するために自分自身を試していない。
更新:私はまだ任意のポリゴンに合わせて画像を操作できるかどうかを調べています。原則として、あなたはそれを行うためにsetTransform
を使用することができます。
ctx.save();
ctx.setTransform(m11, m12, m21, m22, dx, dy);
ctx.drawImage(imageObj);
ctx.restore();
がsetTransform
パラメータの値を決定する(それが可能だと、すべてのことを行うには)トリッキーな部分です。
(0,0) --- (w,0) (x1,y1) --- (x2,y2)
| | | |
| Image | => | Morphed |
| | | |
(0,h) --- (w,h) (x3,y3) --- (x4,y4)
各点について、次の行列演算を行うだろう:それは私がに任意の数学をやったので、looongあったが、私はここに正しくリコール場合は何をすべきかだだ
|m11 m21 dx| |xI| |xM|
|m12 m22 dy| X |yI| = |yM|
| 0 0 1| | 1| | 1|
8つの方程式、6つの変数(行列要素が変数であることを覚えている、残りは定数 - 入力)。解決できないかもしれません。今度は、推論(またはグーグル、またはMath.SE ...の質問)を行い、各パラメータの公式を実装するだけです。 setTransform
であなたがしたいことをするのは不可能だと私は信じています。 Gimpが "perspective"ツールで行うことを見ると、画像を任意のポリゴンに変換するために変換行列の3行目も変更する必要があります。キャンバスAPIはそのための手段を提供していないようです(通常、アフィン変換のみサポートされています:翻訳、回転、スケール、シアー、または上記の組み合わせ)。 2Dにthis postを引用
は変換:
CSS3 2D-トランスフォームは平行四辺形にブロックを変換することができます。たとえば、ブロックをこの図形に変換することは不可能です: [不規則な形] これを行うには、CSS3の3D変形を使用する必要があります。このため、マトリックス構築セットには、4つではなく3つのコントロールポイントがあります。
ありCSS 3D Transformsのための計画があるが、私は広くcanvas要素は、(2Dコンテキストで、つまり - WebGLのはまた別の話である)場合、私は知らない、であることはサポート方法がわからないだけでなく、今までそれをサポートしています。要するに、私が知っている何らかの手段であなたが望むことをすることはできません。
私は本当にこれがOPが望んでいるものであるかどうか確信しています。彼らの質問に私のコメントを見ることをお勧めします。 – Daedalus
@Daedalusはい、私はあなたのコメント(ここと重複しています)を読んだので、私は答えています:a)それは確かにOPが望んでいるかもしれません。 b)私は今日までそれについて知らなかったし、それも私が興味を持っているものだ。とにかく、もう少し詳しく調べてみましょう。コンテキストの変換を使って操作することも可能です。 – mgibsonbr
各オブジェクトの独自の位置には従わないが、素晴らしい方法です。それは、各オブジェクトがtrasparentであるように見えるようにし、背景を見ることができます。 – Forested
あなたはcontext.clip()
を使用してイメージでポリゴンを塗りつぶすことができます。
//create an image
var img = new Image();
img.src = 'imgPath/image.png'
//draw the image when loaded
img.onload = function(){
var ctx = canvas.getContext("2d");
ctx.save();
//define the polygon
ctx.beginPath();
ctx.moveTo(x1,y1);
ctx.lineTo(x2,y2);
ctx.lineTo(x3,y3);
ctx.closePath();
//draw the image
ctx.clip();
ctx.drawImage(img, leftMostXCoor, highestYCoor, polyWidth, polyHeight);
//fill and stroke are still available for overlays and borders
ctx.fill();
ctx.stroke();
ctx.restore();
}
これは、ポリゴンにテクスチャを描画していません。これはそのポリゴンに画像をクリップします... – darkgaze
- 1. html5キャンバスでクリック可能な点を作る方法は?
- 2. HTML5のキャンバスにドラッグ可能なテキストエリアを追加する
- 3. html5キャンバスのキャンバス
- 4. html5キャンバスでカスタムスクロール
- 5. HTML5ビデオ通話は可能ですか?
- 6. HTML5のlocalStorage HTML5でアクセス可能性
- 7. HTML5キャンバスから別のHTML5キャンバスにドラッグアンドドロップする方法
- 8. (HTML5キャンバス/ Javascriptの)
- 9. HTML5キャンバス、テキスト、JavaScript
- 10. HTML5キャンバス、GUI
- 11. HTML5キャンバスのタイミング
- 12. Html5キャンバスJavascriptライブラリ?
- 13. HTML5キャンバス物理
- 14. HTML5キャンバスのクロスオリジンデータ
- 15. HTML5キャンバス "リセット" fillStyle
- 16. MagentoのHTML5キャンバス
- 17. HTML5キャンバスの「ペイント」メソッドですか?
- 18. HTML5キャンバスでサブパターンの開始点と終了点を変更することは可能ですか
- 19. アンドロイドで編集可能なキャンバス
- 20. HTML5キャンバスのバウンスチェック機能がコーナーで失敗する
- 21. html5キャンバスに線分を可変幅で描くことはできますか?
- 22. html5キャンバスでのパスベースのアニメーション
- 23. html5キャンバスでの動きjpeg
- 24. HTML5キャンバスでのPDFレンダリング
- 25. HTML5キャンバスで線をクリア
- 26. html5キャンバスでのスクロール/スライドバック
- 27. HTML5キャンバスでの描画
- 28. HTML5キャンバスで滑らかなウォーキングスプライト
- 29. キャンバス:移動はX軸でのみ可能ですか?
- 30. HTML5キャンバスと操作
短い答え:はい。何を試しましたか? – Joseph
私はcontext.drawImageを使ってみましたが、この方法を使って4つのx、yの位置をすべて指定することはできません – Forested
私はあなたの[他の質問]を覚えています。(http://stackoverflow.com/questions/10660521/html5-canvas -drawimage-using-points)、これは恐らく重複しているかもしれませんが、私はそれについて数時間の研究をしました。イメージをクリップしたい場合は可能です。 **画像を操作したい場合は可能かどうかは確信しています。 – Daedalus