Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.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_Canvas_Text_Transform - Fatal编程技术网

JavaScript画布转换文本

JavaScript画布转换文本,javascript,canvas,text,transform,Javascript,Canvas,Text,Transform,我有以下问题: 我需要在HTML画布上转换文本,例如,给它一个梯形形状。 以下是我尝试过的: context.beginPath(); context.moveTo(0, 0); context.lineTo(200, 0); context.lineTo(100, -100); context.lineTo(0, -100); context.closePath(); context.clip(); context.fillText("Hello World", this.x, this.y)

我有以下问题: 我需要在HTML画布上转换文本,例如,给它一个梯形形状。 以下是我尝试过的:

context.beginPath();
context.moveTo(0, 0);
context.lineTo(200, 0);
context.lineTo(100, -100);
context.lineTo(0, -100);
context.closePath();
context.clip();
context.fillText("Hello World", this.x, this.y);
正如您可能已经猜到的,文本将被剪切,而不是转换以适应形状。下面是我正在尝试做的事情和我成功做到的事情的图片

感谢您的帮助:)

我设法做到了:

我想做的是:


您可以做的是获得一个虚拟画布元素,在其中放置普通文本,然后您可以将自己的数学应用于
textCtx.getImageData
中的像素颜色值,并将其应用到您创建的另一个imageData数组中,因此,您可以使用
transformedTextCtx.putImageData
将其放入另一个具有正确转换的画布中,最后使用
ctx.drawImage
将其画布绘制到原始上下文中

我假设你知道你想应用的数学类型,如果不知道,我建议你研究倾斜和缩放,找出如何将两者结合起来


imageData
方法的mdn资源位于画布渲染上下文页面的“像素操作”部分:

您可以获得一个虚拟画布元素,在其中放置普通文本,然后,您可以将自己的数学运算应用于
textCtx.getImageData
中的像素颜色值,并将其放到您创建的另一个imageData数组中,这样您就可以使用
transformedTextCtx.putImageData
将其放入另一个具有正确变换的画布中,最后使用
ctx.drawImage
将画布绘制到原始上下文上

我假设你知道你想应用的数学类型,如果不知道,我建议你研究倾斜和缩放,找出如何将两者结合起来

imageData
方法的mdn资源位于画布渲染上下文页面的“像素操作”部分:

将帮助您。Canvas2d不支持这种透视变换。我会帮助你的。Canvas2d不支持这种透视变换。