Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript将文本转换为具有字体样式的图像?_Javascript_Html_Css_Fonts_Html5 Canvas - Fatal编程技术网

如何使用javascript将文本转换为具有字体样式的图像?

如何使用javascript将文本转换为具有字体样式的图像?,javascript,html,css,fonts,html5-canvas,Javascript,Html,Css,Fonts,Html5 Canvas,我的代码成功地将文本转换为图像,但无法转换为具有字体样式的图像。我怎么做 徖 var tCtx=document.getElementById('textCanvas').getContext('2d'), imageElem=document.getElementById('image'); document.getElementById('text').addEventListener('keyup',function(){ tCtx.canvas.width=tCtx.measureTe

我的代码成功地将文本转换为图像,但无法转换为具有字体样式的图像。我怎么做

var tCtx=document.getElementById('textCanvas').getContext('2d'),
imageElem=document.getElementById('image');
document.getElementById('text').addEventListener('keyup',function(){
tCtx.canvas.width=tCtx.measureText(this.value).width;
tCtx.fillText(该值为0,10);
imageElem.src=tCtx.canvas.toDataURL();
console.log(imagelem.src);
},假)
.xx{
字体系列:“Fredoka One script=all rev=2”,“Adobe Blank”;
字体大小:400;
字体风格:普通;
字体大小:50px;
}
@字体{
字体系列:“Fredoka One script=all rev=2”;
字体风格:普通;
字体大小:400;
src:url(https://fonts.gstatic.com/l/font?kit=k3kUo8kEI-tA1RRcTZGmTmHEG9St0C3d1om8Mz6slqBKRtvjzUJ6xAJaGHLTbv9tHVEq-H1YLCTXSEDBENILLZKFZUJOIM594GQLTNZCTNZCCNJFHPQC-ZP-ZP_ud1_sh7xK6CJYW2; R7VTFZ5GJBOT49ADTHJLXYSGIMDRZKV&skey=FAC42792792A60C2ABA&v=v5)格式(“woff2”);
}
帆布{
边框:1px黑色实心;
}
#文本画布{
显示:无;
}



您需要设置上下文的属性。它的默认值是
'10px sans serif'
,并且此属性不支持
'inherit'
值(与此不同)

但是,由于您正在调整画布的大小,有一点需要注意:设置画布的
宽度
高度
属性将重置上下文的所有属性。因此,我们需要在测量文本之前和设置画布大小之后设置两次此字体属性

另外,请注意,您可能应该使用FontFaceSet API等待字体加载:

var tCtx=document.getElementById('textCanvas').getContext('2d'),
imageElem=document.getElementById('image');
var font='400 50px“Fredoka One script=all rev=2”,“Adobe Blank”;
document.fonts.load(字体)
.然后(函数(){
document.getElementById('text').addEventListener('keyup',function(){
//在得到尺寸之前设置它
tCtx.font=font
//这将重置上下文的所有属性
tCtx.canvas.width=tCtx.measureText(this.value).width;
//所以我们需要重新设置
tCtx.font=font;
//现在才设置颜色
tCtx.fillStyle='#A0A';
tCtx.fillText(该值为0,50);
imageElem.src=tCtx.canvas.toDataURL();
},假);
});
.xx{
字体系列:“Fredoka One script=all rev=2”,“Adobe Blank”;
字体大小:400;
字体风格:普通;
字体大小:50px;
}
@字体{
字体系列:“Fredoka One script=all rev=2”;
字体风格:普通;
字体大小:400;
src:url(https://fonts.gstatic.com/l/font?kit=k3kUo8kEI-tA1RRcTZGmTmHEG9St0C3d1om8Mz6slqBKRtvjzUJ6xAJaGHLTbv9tHVEq-H1YLCTXSEDBENILLZKFZUJOIM594GQLTNZCTNZCCNJFHPQC-ZP-ZP_ud1_sh7xK6CJYW2; R7VTFZ5GJBOT49ADTHJLXYSGIMDRZKV&skey=FAC42792792A60C2ABA&v=v5)格式(“woff2”);
}
帆布{
边框:1px黑色实心;
}
#文本画布{
显示:无;
}



您需要设置上下文的属性。它的默认值是
'10px sans serif'
,并且此属性不支持
'inherit'
值(与此不同)

但是,由于您正在调整画布的大小,有一点需要注意:设置画布的
宽度
高度
属性将重置上下文的所有属性。因此,我们需要在测量文本之前和设置画布大小之后设置两次此字体属性

另外,请注意,您可能应该使用FontFaceSet API等待字体加载:

var tCtx=document.getElementById('textCanvas').getContext('2d'),
imageElem=document.getElementById('image');
var font='400 50px“Fredoka One script=all rev=2”,“Adobe Blank”;
document.fonts.load(字体)
.然后(函数(){
document.getElementById('text').addEventListener('keyup',function(){
//在得到尺寸之前设置它
tCtx.font=font
//这将重置上下文的所有属性
tCtx.canvas.width=tCtx.measureText(this.value).width;
//所以我们需要重新设置
tCtx.font=font;
//现在才设置颜色
tCtx.fillStyle='#A0A';
tCtx.fillText(该值为0,50);
imageElem.src=tCtx.canvas.toDataURL();
},假);
});
.xx{
字体系列:“Fredoka One script=all rev=2”,“Adobe Blank”;
字体大小:400;
字体风格:普通;
字体大小:50px;
}
@字体{
字体系列:“Fredoka One script=all rev=2”;
字体风格:普通;
字体大小:400;
src:url(https://fonts.gstatic.com/l/font?kit=k3kUo8kEI-tA1RRcTZGmTmHEG9St0C3d1om8Mz6slqBKRtvjzUJ6xAJaGHLTbv9tHVEq-H1YLCTXSEDBENILLZKFZUJOIM594GQLTNZCTNZCCNJFHPQC-ZP-ZP_ud1_sh7xK6CJYW2; R7VTFZ5GJBOT49ADTHJLXYSGIMDRZKV&skey=FAC42792792A60C2ABA&v=v5)格式(“woff2”);
}
帆布{
边框:1px黑色实心;
}
#文本画布{
显示:无;
}



换行变化

另一个post()的这个变体还负责换行:

HTML:

transformall
这是不同的路线
合二为一
形象!
生成图像


此处

换行变化

另一个post()的这个变体还负责换行:

HTML:

transformall
这是不同的路线
合二为一
形象!
生成图像


这里

我如何向文本sir添加颜色样式?
tCtx.fillStyle='red'
。我如何向文本sir添加颜色样式?
tCtx.fillStyle='red'
<textarea id='atext' rows='5'>Transform all 
this different lines
into one single
image!</textarea>
<button id="generate">
Generate image
</button>
<br/>
<canvas id='aCanvas' height=200 width=200 style='display:none'></canvas>
<img id='image' style="background-color:red">
var ctx = document.getElementById('aCanvas').getContext('2d');
var imageElem = document.getElementById('image');
var atext = document.getElementById('atext');

document.getElementById('generate').addEventListener('click', function (){
 
    //split text into lines and find the longest one
  var lines = atext.value.split("\n");
  ctx.font = "30px Verdana"
  let longest = lines.reduce((r, e) => r.length < e.length ? e : r, "");
  ctx.canvas.width = ctx.measureText(longest).width + 90;
  ctx.font = "30px Verdana"
  for(var i=0; i<lines.length; i++){
        ctx.fillText(lines[i], 20, 40*i +40);
  }
  imageElem.src = ctx.canvas.toDataURL();
  console.log(imageElem.src);
}, false);