Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.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
使用HTML5画布将文本(或图像)拟合或扭曲到自定义信封轮廓中_Html_Canvas_Html5 Canvas_Three.js_Webgl - Fatal编程技术网

使用HTML5画布将文本(或图像)拟合或扭曲到自定义信封轮廓中

使用HTML5画布将文本(或图像)拟合或扭曲到自定义信封轮廓中,html,canvas,html5-canvas,three.js,webgl,Html,Canvas,Html5 Canvas,Three.js,Webgl,假设我使用了一些HTML5标记: <canvas id="e" width="400" height="200"></canvas> <script> var canvas = document.getElementById("e"); var context = canvas.getContext("2d"); context.fillStyle = "red"; context.font = "bold 72px JerseyLetters

假设我使用了一些HTML5标记:

<canvas id="e" width="400" height="200"></canvas>
<script>
  var canvas = document.getElementById("e");
  var context = canvas.getContext("2d");
  context.fillStyle = "red";
  context.font = "bold 72px JerseyLetters";
  context.fillText("Bulls", 50, 100);
</script>

var canvas=document.getElementById(“e”);
var context=canvas.getContext(“2d”);
context.fillStyle=“红色”;
context.font=“bold 72px JerseyLetters”;
上下文。填充文本(“公牛”,50,100);
要制作一些很酷的文本,请执行以下操作:

然后我决定把这些信装进一个信封,看起来像这样:

希望得到这样的东西:

我将如何着手(1)定义一个类似于上面的信封,然后(2)使用HTML5画布将文本放入信封以获得结果

我对直接将文本放入信封的方法持开放态度,或者是一种先创建图像,然后将图像放入信封的解决方案

谢谢

编辑

根据@markE的建议,我在这个问题中添加了标签“webgl”和“three.js”。同时,我也将研究这两个包。我是个新手。

webGL方式:

使用像素着色器进行图像处理。 使用2d画布渲染文本,使用缓冲区绑定webGL纹理,并使用画布图像(渲染文本)填充纹理。已经准备好的封套,实际映射封套所包含的区域,并且每个像素从第一张图像起到UV坐标的作用。将其作为像素着色器运行,您将对图像进行压缩,并将输出最终图像的封套(UV)。这样,它完全独立于字体和文本。您甚至可以多做一个图像处理步骤,以便加载任何信封形状并当场处理,从而使其变得与字体、文本和信封形状无关

我不知道我解释得有多好。 希望这能有所帮助。

webGL方式:

使用像素着色器进行图像处理。 使用2d画布渲染文本,使用缓冲区绑定webGL纹理,并使用画布图像(渲染文本)填充纹理。已经准备好的封套,实际映射封套所包含的区域,并且每个像素从第一张图像起到UV坐标的作用。将其作为像素着色器运行,您将对图像进行压缩,并将输出最终图像的封套(UV)。这样,它完全独立于字体和文本。您甚至可以多做一个图像处理步骤,以便加载任何信封形状并当场处理,从而使其变得与字体、文本和信封形状无关

我不知道我解释得有多好。
不过,希望这能有所帮助。

SVG提供了此类文本转换。看


编辑:此链接似乎正在将文本转换为实际的SVG。很抱歉,这可能对您没有帮助。

SVG提供了此类文本转换。看


编辑:此链接似乎正在将文本转换为实际的SVG。可能对您没有帮助,对不起。

如果有人不知道,只有在您的计算机上安装了这种字体,文本才会是这样的:我能做的最好的事情就是引导您远离死胡同,找到解决方案。您想要将直线转换为曲线,而您的画布“2d”上下文不具备该功能。然而,canvas“3d”确实具有这种能力。我没有这种魔力,但如果你在你的问题中添加“webgl”和“three.js”标签,你可能会吸引到有这样做的人。谢谢@markE,添加了标签,我也会查看这些软件包。万一有人不知道,只有在你的电脑上安装了这种字体,文本才会像这样:我能做的最好的事情就是引导你从死胡同走向解决方案。您想要将直线转换为曲线,而您的画布“2d”上下文不具备该功能。然而,canvas“3d”确实具有这种能力。我没有这种魔力,但如果你在你的问题中添加“webgl”和“three.js”标签,你可能会吸引到有这种魔力的人。谢谢@markE,添加了标签,我也会研究这些软件包。实际上,实时文本效果似乎很有希望。维护原文对我来说非常重要,这样我就可以很容易地修改它。我会进一步调查的。谢谢实际上,实时文本效果似乎很有希望。维护原文对我来说非常重要,这样我就可以很容易地修改它。我会进一步调查的。谢谢@Tom D,您还可以创建具有封套形状的多边形,并指定纹理,该纹理将适合您之前在画布中绘制的多边形。它是完全动态的。你能提供一些代码吗?我对这种方法很感兴趣,但我是WebGL的初学者。@Tom D,您还可以创建具有封套形状的多边形,并指定您以前在画布中绘制的适合该多边形的纹理。它是完全动态的。你能提供一些代码吗?我对这种方法很感兴趣,但我是WebGL的初学者。