효과는 캔버스가 선 모양을 그리는 방식의 속성 인 것으로 보입니다. 선의 두께의 절반이 모양 안쪽에 그려지고 절반은 모양 바깥쪽에 그려집니다. 한 가지 방법은 채워진 모양과 테두리를 별도의 패스로 그립니다. 귀하의 예를 위해 변경 한 사항은 아래와 같습니다. 이는 불규칙한 모양으로는 더 어려울 것입니다.
var canvas = document.getElementById("myCanvas");
var context = canvas.getContext("2d");
var topLeftCornerX = 188;
var topLeftCornerY = 50;
var width = 200;
var height = 100;
var linewidth = 10;
context.globalAlpha = 0.5;
context.beginPath();
context.moveTo(topLeftCornerX, topLeftCornerY);
context.lineTo(topLeftCornerX+width,topLeftCornerY);
context.lineTo(topLeftCornerX+width,topLeftCornerY+height);
context.lineTo(topLeftCornerX,topLeftCornerY+height);
context.closePath();
context.fillStyle = "#FF0000";
context.fill();
context.beginPath();
context.moveTo(topLeftCornerX-linewidth/2, topLeftCornerY-linewidth/2);
context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY-linewidth/2);
context.lineTo(topLeftCornerX+width+linewidth/2,topLeftCornerY+height+linewidth/2);
context.lineTo(topLeftCornerX-linewidth/2,topLeftCornerY+height+linewidth/2);
context.closePath();
context.lineWidth = linewidth;
context.strokeStyle = "#00FF00";
context.stroke();
답장을 보내 주셔서 감사합니다. 하지만 제 경우에는 항상 복잡한 경로를 그릴 필요가 있습니다. 내가 찾은 1 해결책은 먼저 요소를 채우고 "globalCompositeOperation = copy"를 사용하여 획을 긋는 것입니다. 하지만 저는 캔버스에서 단 하나의 모양을 원할 때만 도움이됩니다. 하지만 제 경우에는 캔버스에 이미 많은 모양을 그렸습니다. 다른 모양 위에 다른 모양을 그려야합니다. 나는 그릴 수도 있지만 임시 캔버스를 사용하여 그 위에 새로운 도형을 그려야하고 "drawImage"를 사용하여 주 캔버스에 도형을 그려야합니다. 하지만 저는 임시 캔버스를 원하지 않습니다. – Parth