ããã¾ã§ã®ä¾ã§ã¯ãã¹ã¦ãå³å½¢ã¯ã常㫠1 ã¤ãã¤éãã¦æããã¦ãã¾ãããããã¯ã»ã¨ãã©ã®ç¶æ³ã«ããã¦ååãããã»ã©é©åã§ãããè¤åå³å½¢ã®æ§ç¯é åºãå¶éããã¾ãããããã globalCompositeOperation
ããããã£ãè¨å®ãããã¨ã§ããã®åä½ã夿´ãããã¨ãã§ãã¾ããããã«ã clip
ããããã£ã«ãã£ã¦ãã·ã§ã¤ãã®ä¸è¦ãªé¨åãé ããã¨ãã§ãã¾ãã
globalCompositeOperation
æ¢åã®å³å½¢ã®èå¾ã«æ°ããå³å½¢ãæç»ã§ããã ãã§ãªããç¹å®ã®é åããã¹ã¯ãããããã£ã³ãã¹ã®ä¸é¨ãæ¶å»ãããï¼clearRect()
ã¡ã½ããã®ããã«ç©å½¢ã«éå®ããªãï¼ããã®ä»ã«ã使ç¨ãããã¨ãå¯è½ã§ãã
globalCompositeOperation = type
ããã¯ãæ°ããå³å½¢ãæãã¨ãã«é©ç¨ããåæå¦çã®ç¨®é¡ãè¨å®ãã¾ãã type ã¯ã 12 種é¡ã®åæå¦çãã使ç¨ãããã®ãç¹å®ããæååã§ãã
ã¯ãªããã³ã°ãã¹ã¯é常ã®ãã£ã³ãã¹ã®å³å½¢ã«ä¼¼ã¦ãã¾ãããå³å½¢ã®ä¸è¦ãªé¨åãé ããã¹ã¯ã¨ãã¦ä½ç¨ãã¾ããããã以ä¸ã®ç»åã§è¦è¦åãã¾ããã赤ãæåã®å³å½¢ã¯ãã¯ãªããã³ã°ãã¹ã§ãããã®ãã¹ã®å¤å´ã«ãããã®ã¯ãã¹ã¦ããã£ã³ãã¹ã§æç»ããã¾ããã
ã¯ãªããã³ã°ãã¹ã¨å
ã»ã©ã® globalCompositeOperation
ããããã£ãæ¯è¼ããã¨ãããããåã广ããããããã¬ã³ãã¢ã¼ãã¨ã㦠source-in
㨠source-atop
ã® 2 ã¤ããããã¨ããããã¾ããããã 2 ã¤ã¨ã®ãã£ã¨ãéè¦ãªéãã¯ãã¯ãªããã³ã°ãã¹ã¯å®éã«ãã£ã³ãã¹ã«æããããã®ã§ã¯ãªããã¨ã¨ãã¯ãªããã³ã°ãã¹ã¯æ°ããå³å½¢ã«ããå½±é¿ãåããªããã¨ã§ããããã¯å¶éãããé åã«è¤æ°ã®å³å½¢ãæãã¨ãããã¯ãªããã³ã°ãã¹ã®ç®æ¨ã表ãã¦ãã¾ãã
å³å½¢ã®æç»ã®ç« ã§ã¯ stroke()
ããã³ fill()
ã¡ã½ããã®ã¿ã«è¨åãã¾ãããããã¹ãæ±ã第 3 ã®ã¡ã½ããã¨ã㦠clip()
ãããã¾ãã
clip()
ç¾å¨æ§ç¯ãã¦ãããã¹ããç¾å¨ã®ã¯ãªããã³ã°ãã¹ã«å¤æãã¾ãã
closePath()
ã®ä»£ããã« clip()
ã使ç¨ããã¨ããã¹ã®è¼ªéãæãããå¡ãã¤ã¶ãã®ã§ã¯ãªãããã¹ãéãã¦ã¯ãªããã³ã°ãã¹ã«å¤æãã¾ãã
æ¢å®ã§ <canvas>
è¦ç´ ã«ã¯ããã£ã³ãã¹èªä½ã¨ã¾ã£ããåã大ããã®ã¯ãªããã³ã°ãã¹ãåå¨ãã¾ããè¨ãæããã¨ãã¯ãªããã³ã°ã¯è¡ããã¾ããã
clip
ã®ä¾
ãã®ä¾ã§ã¯ãã©ã³ãã ãªæã®éå£ã®æç»å ãç¹å®ã®é åã«å¶éããããã«ãåå½¢ã®ã¯ãªããã³ã°ãã¹ã使ç¨ãã¦ãã¾ãã
function draw() {
const ctx = document.getElementById("canvas").getContext("2d");
ctx.fillRect(0, 0, 150, 150);
ctx.translate(75, 75);
// åå½¢ã®ã¯ãªããã³ã°ãã¹ã使
ctx.beginPath();
ctx.arc(0, 0, 60, 0, Math.PI * 2, true);
ctx.clip();
// èæ¯ãæã
const lingrad = ctx.createLinearGradient(0, -75, 0, 75);
lingrad.addColorStop(0, "#232256");
lingrad.addColorStop(1, "#143778");
ctx.fillStyle = lingrad;
ctx.fillRect(-75, -75, 150, 150);
generateStars(ctx);
}
function generateStars(ctx) {
for (let j = 1; j < 50; j++) {
ctx.save();
ctx.fillStyle = "#fff";
ctx.translate(
75 - Math.floor(Math.random() * 150),
75 - Math.floor(Math.random() * 150),
);
drawStar(ctx, Math.floor(Math.random() * 4) + 2);
ctx.restore();
}
}
function drawStar(ctx, r) {
ctx.save();
ctx.beginPath();
ctx.moveTo(r, 0);
for (let i = 0; i < 9; i++) {
ctx.rotate(Math.PI / 5);
if (i % 2 === 0) {
ctx.lineTo((r / 0.525731) * 0.200811, 0);
} else {
ctx.lineTo(r, 0);
}
}
ctx.closePath();
ctx.fill();
ctx.restore();
}
<canvas id="canvas" width="150" height="150"></canvas>
ã³ã¼ãã®å§ãã®æ°è¡ã§ãèæ¯ã¨ãã¦ãã£ã³ãã¹ã¨åãµã¤ãºã®é»ãèæ¯ãæãã¦ãåç¹ãä¸å¤®ã«ç§»åãã¾ããæ¬¡ã«ãåå¼§ãæã㦠clip()
ãå¼ã³åºããã¨ã§ãåå½¢ã®ã¯ãªããã³ã°ãã¹ã使ãã¾ããã¯ãªããã³ã°ãã¹ã¯ããã£ã³ãã¹ã®ç¶æ
ã¨ãã¦ä¿åããããã®ã®ã²ã¨ã¤ã§ãããã¾ããå
ã®ã¯ãªããã³ã°ãã¹ãç¶æãããå ´åã¯ãæ°ããã¯ãªããã³ã°ãã¹ã使ããåã«ä¿åãããã£ã³ãã¹ã®ç¶æ
ãããã¨ããã§ãããã
ã¯ãªããã³ã°ãã¹ã使ããå¾ã«æãããã®ã¯ãã¹ã¦ããã¹ã®å
é¨ã«ãããã®ã ããè¦ããç¶æ
ã«ãªãã¾ããããã¯ãæ¬¡ã«æãã¦ããç·å½¢ã°ã©ãã¼ã·ã§ã³ã§æããã§ãããã®å¾ã«ç¬èªã® drawStar()
颿°ã使ç¨ãã¦ãä½ç½®ã大ãããã©ã³ãã ãªæã 50 åæãã¾ããæãã¾ããã¯ãªããã³ã°ãã¹ã®å
é¨ã§å®ç¾©ããããã®ããè¦ãã¾ããã
éã¯ãªããã³ã°ãã¹ã¯ã¨ãããã®ã¯ããã¾ããããããããã£ã³ãã¹å ¨ä½ãé·æ¹å½¢ã§åããã¹ããããããé¨åã«ç©´ãããããã¹ã¯ãå®ç¾©ãããã¨ã¯ã§ãã¾ããç©´ã®ããå³å½¢ãæç»ãã å ´åã¯ãå¤å´ã®å³å½¢ã¨éæ¹åã«ç©´ãæç»ããå¿ è¦ãããã¾ããä¸è¨ã®ä¾ã§ã¯ã空ã«ç©´ãéãã¦ãã¾ãã
é·æ¹å½¢ã¯æç»æ¹åãæã¡ã¾ããããããããæè¨åãã«æç»ãããã®ããã«åä½ãã¾ããæ¢å®ã§ã¯ arc ã³ãã³ããæè¨åãã«æãã¾ãããæå¾ã®å¼æ°ã§æ¹åãå¤ãããã¨ãã§ãã¾ãã
<html lang="ja">
<body>
<canvas id="canvas" width="150" height="150"></canvas>
</body>
</html>
function draw() {
const canvas = document.getElementById("canvas");
if (canvas.getContext) {
const ctx = canvas.getContext("2d");
ctx.translate(75, 75);
// ã¯ãªããã³ã°ãã¹
ctx.beginPath();
ctx.rect(-75, -75, 150, 150); // å¤å´ã®é·æ¹å½¢
ctx.arc(0, 0, 60, 0, Math.PI * 2, true); // åæè¨åãã®ç©´
ctx.clip();
// èæ¯ãæç»
const lingrad = ctx.createLinearGradient(0, -75, 0, 75);
lingrad.addColorStop(0, "#232256");
lingrad.addColorStop(1, "#143778");
ctx.fillStyle = lingrad;
ctx.fillRect(-75, -75, 150, 150);
generateStars(ctx);
}
}
function generateStars(ctx) {
for (let j = 1; j < 50; j++) {
ctx.save();
ctx.fillStyle = "#fff";
ctx.translate(
75 - Math.floor(Math.random() * 150),
75 - Math.floor(Math.random() * 150),
);
drawStar(ctx, Math.floor(Math.random() * 4) + 2);
ctx.restore();
}
}
function drawStar(ctx, r) {
ctx.save();
ctx.beginPath();
ctx.moveTo(r, 0);
for (let i = 0; i < 9; i++) {
ctx.rotate(Math.PI / 5);
if (i % 2 === 0) {
ctx.lineTo((r / 0.525731) * 0.200811, 0);
} else {
ctx.lineTo(r, 0);
}
}
ctx.closePath();
ctx.fill();
ctx.restore();
}
draw();
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4