gpt4 book ai didi

javascript - 如何在 html Canvas 上绘制 Font Awesome 图标 [版本 <5]

转载 作者:可可西里 更新时间:2023-11-01 02:14:54 24 4
gpt4 key购买 nike

如何将 Font Awesome 字符(图标字形)绘制到 html5 Canvas 上?我使用的是旧版本的 Font Awesome。

我如何设置那些绘制的字符的样式?

<script>

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.font = '';
context.fillText();

</script>

语言:lang-html

<canvas id="myCanvas" class="canvas" width="500" height="500" ></canvas>html>

<script>

var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
context.font = '';
context.fillText();

</script>

语言:lang-html

<canvas id="myCanvas" class="canvas" width="500" height="500" ></canvas>

最佳答案

enter image description here

以下是在 html5 Canvas 上绘制 Font Awsome 字形的方法:

  1. 链接在 Font Awesome 中:

    <link rel="stylesheet" 
    href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
  2. 将上下文字体设置为 Font Awesome:

    // set the canvas context's font-size and font-face
    context.font='14px FontAwesome';
  3. 在 Canvas 上绘制一个 Font Awesome 字符:

    // specify the desired character code with the Unicode prefix (\u) 
    context.fillText('\uF047',20,50);

这是示例代码和演示:

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

ctx.font='12px verdana';
ctx.fillText('Please wait for Font Awesome to load...',20,30);

// give font awesome time to load
setTimeout(start,2000);

function start(){
ctx.clearRect(0,0,canvas.width,canvas.height);
ctx.font='30px FontAwesome';
ctx.fillText('\uF047',20,50);
}
body{ background-color: ivory; }
#canvas{border:1px solid red; margin:0 auto; }
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<h4>Font Awesome glyph drawn onto html5 canvas</h4>
<canvas id="canvas" width=300 height=100></canvas>

[补充:加载FontAwesome的另一种方式]

正如@Kaiido 评论的那样,您可以通过在 canvas 元素(或其他元素)上设置 font-family:fontawesome 让浏览器开始加载 FontAwesome。

该演示展示了如何“即时”加载自定义字体(包括 FontAwesome)。

[新增:一个 FontAwesome 加载函数]

与 img 一样,字体加载是异步的,因此您必须等待它们完全加载后再尝试在 Canvas 上绘制它们。但与 imgs 不同的是,字体没有内置的 .onload 方法来告诉我们它们何时完全加载。

这是一个解决方法 onload 函数,当 FontAwesome 已完全加载并准备好在 Canvas 上 fillText 时,您可以使用它来触发回调:

<!doctype html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<style>
body{ background-color: ivory; }
#canvas{border:1px solid red; margin:0 auto; }
</style>
<script>
$(function(){

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw,ch;

AwesomeFontOnload(start,3000);

function start(){
ctx.font='48px fontawesome';
ctx.fillText('\uF064\uF065 \uF0a5',20,75);
}

function AwesomeFontOnload(callback,failAfterMS){
var c=document.createElement("canvas");
var cctx=c.getContext("2d");
var ccw,cch;
var fontsize=36;
var testCharacter='\uF047';
ccw=c.width=fontsize*1.5;
cch=c.height=fontsize*1.5;
cctx.font=fontsize+'px fontawesome';
cctx.textAlign='center';
cctx.textBaseline='middle';
var startCount=pixcount();
var t1=performance.now();
var failtime=t1+failAfterMS;
//
requestAnimationFrame(fontOnload);
//
function fontOnload(time){
var currentCount=pixcount();
if(time>failtime){
alert('Font Awsome failed to load after '+failAfterMS+'ms.');
}else if(currentCount==startCount){
requestAnimationFrame(fontOnload);
}else{
callback();
}
}
//
function pixcount(){
cctx.clearRect(0,0,ccw,cch);
cctx.fillText(testCharacter,ccw/2,cch/2);
var data=cctx.getImageData(0,0,ccw,cch).data;
var count=0;
for(var i=3;i<data.length;i+=4){
if(data[i]>10){count++;}
}
return(count);
}
}

}); // end $(function(){});
</script>
</head>
<body>
<h4>Font Awesome glyphs drawn onto html5 canvas</h4>
<canvas id="canvas" width=300 height=300></canvas>
</body>
</html>

关于javascript - 如何在 html Canvas 上绘制 Font Awesome 图标 [版本 <5],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35570801/

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