2017-12-14 24 views
0

私はHTML canvasを使ってフレームを描画しようとしています。ここにコードがあります: ここに、500pxは私の画像の高さの幅になります。だから、私はトップ...画像の周りに枠を描画するキャンバスの位置が正しく動作しない

function myCanvas() { 
 
    var c = document.getElementById("myCanvas"); 
 
    var ctx = c.getContext("2d"); 
 
    var top = document.getElementById("top"); 
 
    var bottom = document.getElementById("bottom"); 
 
    var left = document.getElementById("left"); 
 
    var right = document.getElementById("right"); 
 
// ctx.drawImage(img,0,0); 
 

 

 
    var ptrn = ctx.createPattern(left, 'repeat'); 
 
    var topPtrn = ctx.createPattern(top, 'repeat'); 
 
    var bottomPtrn = ctx.createPattern(bottom, 'repeat'); 
 
    var rightPtrn = ctx.createPattern(right, 'repeat'); 
 

 
    ctx.fillStyle = ptrn; // left 
 
    ctx.fillRect(0, top.clientHeight, left.clientWidth, 500); // left 
 

 

 
    ctx.fillStyle = topPtrn; // top 
 
    ctx.fillRect(left.clientWidth, 0, 500, top.clientHeight); // top 
 

 

 
    ctx.fillStyle = bottomPtrn; // bottom 
 
    ctx.fillRect(left.clientWidth, 500 + top.clientHeight, 500, bottom.clientHeight); // botttom 
 

 
    //ctx.save(); 
 
    //ctx.rotate(Math.PI/2); 
 

 
    //ctx.restore(); 
 
    ctx.fillStyle = rightPtrn; 
 
    ctx.fillRect(500 + left.clientWidth, top.clientHeight, right.clientWidth, 500); // right  
 
    // ctx.rotate(180*Math.PI/180); 
 

 

 
}
<p>Image to use:</p> 
 
<img id="top" src="https://i.imgur.com/jbOpU7Y.png" alt="The Scream" > 
 

 
<img id="bottom" src="https://i.imgur.com/ftckhxk.png" alt="The Scream" > 
 

 
<img id="left" src="https://i.imgur.com/PNahWhN.png" alt="The Scream" > 
 

 
<img id="right" src="https://i.imgur.com/7lWBQcp.png" alt="The Scream"> 
 

 
<p>Canvas to fill:</p> 
 
<canvas id="myCanvas" width="800" height="800" 
 
style="border:1px solid #d3d3d3;"> 
 
Your browser does not support the HTML5 canvas tag.</canvas> 
 

 
<p><button onclick="myCanvas()">Try it</button></p>

をしようとしているし、左のパターンが正しく動作しているが、右と下のパターンが正しく表示されていません。

更新:私の目標は、4つの画像をフレームのように見せることです。左と上の画像はきれいに配置されています。しかし、右と下の画像は正しく配置されていますが、正しく表示されていません。私は何を意味するのか理解するためにコードスニペットでそれを実行します

+0

"動作しない" と "正しく表示されない" 技術的な用語ではありません。両方の意味を定義します。 – Rob

+0

@Ahsan Aasimは私の答えを確認します – bluehipy

答えて

0
私は、このような操作にキャンバスの高さと幅を使用します

ctx.fillRect(0, top.clientHeight, left.clientWidth, c.height-(2*top.clientHeight)); // left 
ctx.fillRect(left.clientWidth, 0, c.width-(2*top.clientWidth), top.clientHeight); // top 
ctx.fillRect(left.clientWidth, c.height-top.clientHeight, c.width-(2*bottom.clientWidth), bottom.clientHeight); // botttom 
ctx.fillRect(c.width-right.clientWidth, top.clientHeight, right.clientWidth, c.height-(2*top.clientHeight)); // right 
+0

私は正常に画像の周りにフレームを描きました。パターンの画像の高さは機能していません。画像が塗りつぶしの高さでカットされています。私の他の質問をここで確認できますか? https://stackoverflow.com/questions/47987196/setting-height-to-image-for-canvas-drawing –

+0

異なるサイズの画像があることに注意してください。私はそれを草稿であり、あなたの本当の解決策では、あなたは同じサイズの画像を持ちたいと思っています。同じサイズを使用する場合は、ソリューションがあります。私の解決策が今あなたにとってうまくいけば、正解としてそ​​れをチェックしてください、そして私はあなたの他の質問をチェックします。 – enk1

+0

問題は位置付けに関するものだったので、上記のコードは完全に機能します。しかし、私は描画されたrectの内側に収まるようにイメージのサイズを変更する必要があります。ここで私の質問をチェックしてください。 https://stackoverflow.com/questions/47987196/setting-height-to-image-for-canvas-drawing –

1

問題は、パターンがmaxWidth, maxHeightゴマと充填することによって0,0からのコンテキスト全体を埋めるということですx,yw x hにある矩形は、そのサーフェス以外のすべてのものをマスキングするのと同じであり、パターンはそのサーフェスに対して0,0から開始しません。

したがって、bottomright罫線のキャンバスコンテキストの原点を変更する必要があります。

function myCanvas() { 
 
    var c = document.getElementById("myCanvas"); 
 
    var ctx = c.getContext("2d"); 
 
    var top = document.getElementById("top"); 
 
    var bottom = document.getElementById("bottom"); 
 
    var left = document.getElementById("left"); 
 
    var right = document.getElementById("right"); 
 
    // ctx.drawImage(img,0,0); 
 

 

 
    var ptrn = ctx.createPattern(left, 'repeat'); 
 
    var topPtrn = ctx.createPattern(top, 'repeat'); 
 
    var bottomPtrn = ctx.createPattern(bottom, 'repeat'); 
 
    var rightPtrn = ctx.createPattern(right, 'repeat'); 
 

 
    ctx.fillStyle = ptrn; // left 
 
    ctx.fillRect(0, top.clientHeight, left.clientWidth, 500); // left 
 

 

 
    ctx.fillStyle = topPtrn; // top 
 
    ctx.fillRect(left.clientWidth, 0, 500, top.clientHeight); // top 
 

 
    ctx.transform(1, 0, 0, 1, left.clientWidth, 500 + top.clientHeight); 
 
    ctx.fillStyle = bottomPtrn; // bottom 
 
    ctx.fillRect(0, 0, 500, bottom.clientHeight); // botttom 
 

 
    ctx.transform(1, 0, 0, 1, -left.clientWidth, -500 - top.clientHeight); 
 
    ctx.transform(1, 0, 0, 1, left.clientWidth + 500, top.clientHeight); 
 
    ctx.fillStyle = rightPtrn; 
 
    ctx.fillRect(0, 0, right.clientWidth, 500); // right  
 

 

 

 
}
<p>Image to use:</p> 
 
<img id="top" src="https://i.imgur.com/jbOpU7Y.png" alt="The Scream"> 
 

 
<img id="bottom" src="https://i.imgur.com/ftckhxk.png" alt="The Scream"> 
 

 
<img id="left" src="https://i.imgur.com/PNahWhN.png" alt="The Scream"> 
 

 
<img id="right" src="https://i.imgur.com/7lWBQcp.png" alt="The Scream"> 
 

 
<p>Canvas to fill:</p> 
 
<canvas id="myCanvas" width="800" height="800" style="border:1px solid #d3d3d3;"> 
 
Your browser does not support the HTML5 canvas tag.</canvas> 
 

 
<p><button onclick="myCanvas()">Try it</button></p>

+0

私は正常に画像の周りにフレームを描きました。パターンの画像の高さは機能していません。画像が塗りつぶしの高さでカットされています。私の他の質問をここで確認できますか? https://stackoverflow.com/questions/47987196/setting-height-to-image-for-canvas-drawing –

+0

@AhsanAasimこの回答は役に立ちましたか? – bluehipy

+0

はい、それは役に立ちましたが、enk1sの回答はうまく機能します。私はイメージの周りにイメージを描画することができたが、私のイメージは正しく表示されません。私の他の質問を見ることができます –

関連する問題