Kinetic.js を使用して放射状グラデーションに変換を適用したいと考えています。
たとえば、中央(白)から側面への放射状のグラデーションを持つ200x200の長方形があります。グラデーションのみをスケーリングして、円形ではなく楕円形にすることができますが、長方形の正方形 (および 200x200 サイズ) をそのまま維持するにはどうすればよいですか?
Kinetic.js を使用して放射状グラデーションに変換を適用したいと考えています。
たとえば、中央(白)から側面への放射状のグラデーションを持つ200x200の長方形があります。グラデーションのみをスケーリングして、円形ではなく楕円形にすることができますが、長方形の正方形 (および 200x200 サイズ) をそのまま維持するにはどうすればよいですか?
KineticJS で楕円形の放射状グラデーション塗りつぶしを作成する方法は次のとおりです。
KineticJS ノード (四角形など) は、「fillPatternImage」を使用して画像を塗りつぶすことができます。
したがって、長方形を楕円形の放射グラデーションの画像で塗りつぶすことができます。
以下の「ovalGradientURL()」関数を使用して、グラデーション画像を自動的に生成できます。
もちろん、この関数を変更して、必要なさまざまなグラデーション形状/色を実行できます。この関数の戻り値は、Image() のソースとして使用できる dataURL です。次のように単純です: myImage.src=ovalGradientURL();
ovalGradientURL() は次のように機能します。
ここにコードとフィドルがあります: http://jsfiddle.net/m1erickson/jsKaB/
<!DOCTYPE HTML>
<html>
<head>
<style>
body { margin: 0px; padding: 0px; }
canvas{ border:1px solid red; }
</style>
</head>
<body>
<div id="container"></div>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.0-beta2.js"></script>
<script>
// draw KineticJS stuff
function draw(gradientImage) {
var stage = new Kinetic.Stage({
container: 'container',
width: 300,
height: 300
});
var layer = new Kinetic.Layer();
var rect = new Kinetic.Rect({
x: 50,
y: 25,
width: 200,
height: 200,
fillPatternImage: gradientImage,
stroke: 'black',
strokeWidth: 4
});
layer.add(rect);
stage.add(layer);
}
// Create an image of an oval radial gradient
// Use this image as fill for the kineticjs rect
function ovalGradientURL(){
// new up a canvas
var canvas = document.createElement('canvas');
canvas.width=200;
canvas.height=200;
var context = canvas.getContext('2d');
var cx=canvas.width/4;
var cy=canvas.height/2;
// draw a rectangle filled with an oval gradient
context.rect(0, 0, canvas.width, canvas.height);
var grad = context.createRadialGradient(cx, cy, 15, cx, cy, 130);
grad.addColorStop(0, 'white');
grad.addColorStop(.8, 'blue');
context.scale(2,1);
context.fillStyle = grad;
context.fill();
return(canvas.toDataURL());
}
// create an Image() out of the canvas.toDataURL()
// then start KineticJS draw()
var img=new Image();
img.onload=function(){
draw(img);
}
img.src=ovalGradientURL();
</script>
</body>
</html>