0
キャンバスのテキストの周りに白い枠線やストロークが必要ですが、テキストにはマスク(境界線ではありません)が必要です。これは可能ですか?globalCompositeOperationを使用してキャンバステキストをイメージでマスクする。テキストをマスクするにはどうすればよいのですか?
This is what i am currently getting with the mask + stroke.
これは私が現在使用していますコードです:
function wrapText(ctx, text, x, y, maxWidth, lineHeight) {
var cars = text.split("\n");
for (var ii = 0; ii < cars.length; ii++) {
var line = "";
var words = cars[ii].split(" ");
for (var n = 0; n < words.length; n++) {
var testLine = line + words[n] + " ";
var metrics = ctx.measureText(testLine);
var testWidth = metrics.width;
if (testWidth > maxWidth) {
ctx.fillText(line, x, y);
line = words[n] + " ";
y += lineHeight;
}
else {
line = testLine;
}
}
ctx.fillText(line, x, y);
y += lineHeight;
}
}
function draw(x) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.save();
ctx.beginPath();
// put text on canvas
var maxWidth = canvas.width - 100;
var lineHeight = 100;
var x = (canvas.width - maxWidth)/2;
var y = 100;
ctx.font = "50px crewniverse_font";
ctx.strokeStyle = 'white';
ctx.miterLimit = 2;
ctx.lineJoin = 'circle';
ctx.lineWidth = 7;
ctx.strokeText(inputText.value, x, y);
ctx.lineWidth = 1;
wrapText(ctx, inputText.value, x, y, maxWidth, lineHeight); //wrap the text
// draw the mask
ctx.beginPath();
ctx.globalCompositeOperation = "source-in";
ctx.drawImage(img, y * 4, y * 4, img.width, img.height, 0, 0, canvas.width, canvas.height);
ctx.restore();
}
function init() {
canvas.width = canvas.height = 1000;
submitButton = document.getElementById('submit-button');
submitButton.addEventListener('click', function() {
draw();
});
}
これを行うにはどのように任意のアイデアを?
ありがとうございました!どのようなアイデアをどのように私はそれを作るので、ストロークはアウトラインとしてのみ表示され、テキスト内のストロークも入れないのですか? http://imgur.com/6KKGZJI – hartleyterw
@ SpopovabgSはい、単純に 'ctx.globalCompositeOperation =" source-over ";"を 'ctx.globalCompositeOperation =" destination-over ";"で置き換えて既存のコンテンツの背後に描きます。 – Kaiido
ありがとうございます!もう1つ、ストロークがちょっと不具合を起こしていますが、これを修正する方法はありますか? http://imgur.com/MqtwUYK – hartleyterw