gpt4 book ai didi

javascript - 大小以适合 Canvas 上的字体

转载 作者:太空狗 更新时间:2023-10-29 15:20:36 24 4
gpt4 key购买 nike

我目前有这个 http://jsfiddle.net/dgAEY/ 效果很好,我只需要想办法在字体太长时调整字体大小。我调查了Auto-size dynamic text to fill fixed size container我已经尝试应用他们发布的 Jquery 函数,但我无法让它工作。

HTML

<form action="" method="POST" id="nametag" class="nametag">
Line1:
<input type="text" id="line1" name="line1" style="width:250px;" /><br>
Line2:
<input type="text" id="line2" name="line2" style="width:250px;" /><br>
Line3:
<input type="text" id="line3" name="line3" style="width:250px;" /><br>
Line4:
<input type="text" id="line4" name="line4" style="width:250px;" /><br>

<br><br><b>Name Tag</b><br>
<canvas width="282px" height="177px" id="myCanvas" style="border: black thin solid;"></canvas>
</form>

JavaScript

$(document).ready(function () {
var canvas = $('#myCanvas')[0];
var context = canvas.getContext('2d');

var imageObj = new Image();
imageObj.onload = function() {
context.drawImage(imageObj, 0, 0);
};
imageObj.src = "http://dummyimage.com/282x177/FFF/FFF";

$('#nametag').bind('change keyup input', updateCanvas);
$('#line2').bind('click', updateCanvas);
$('#line3').bind('click', updateCanvas);
$('#line4').bind('click', updateCanvas);

function updateCanvas() {

context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(imageObj, 0, 0);
context.textAlign = "center";

context.font = "bold 18pt Arial";
context.fillText($('#line1').val(), canvas.width * 0.5, 70);

context.font = "12pt Arial";
context.fillText($('#line2').val(), canvas.width * 0.5, 90);
context.fillText($('#line3').val(), canvas.width * 0.5, 120);
context.fillText($('#line4').val(), canvas.width * 0.5, 140);

}
});

最佳答案

您可以使用 context.measureText 获取当前字体中任何给定文本的像素宽度。

然后,如果该宽度太大,则减小字体大小直到适合。

context.font="14px verdana";

var width = context.measureText("Hello...Do I fit on the canvas?").width

if(width>myDesiredWidth) // then reduce the font size and re-measure

演示:

var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");

fitTextOnCanvas("Hello, World!", "verdana", 125);


function fitTextOnCanvas(text, fontface, yPosition) {

// start with a large font size
var fontsize = 300;

// lower the font size until the text fits the canvas
do {
fontsize--;
context.font = fontsize + "px " + fontface;
} while (context.measureText(text).width > canvas.width)

// draw the text
context.fillText(text, 0, yPosition);

alert("A fontsize of " + fontsize + "px fits this text on the canvas");

}
body {
background-color: ivory;
}

#canvas {
border: 1px solid red;
}
<canvas id="canvas" width=300 height=300></canvas>

关于javascript - 大小以适合 Canvas 上的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com