当前位置: 首页 > 知识库问答 >
问题:

用画布在图像中绘制线条

罗甫
2023-03-14

我有以下代码应该在图像中绘制线条。我的代码是:

js prettyprint-override">const { createCanvas } = require('canvas')
const fs = require('fs')

const width = 500
const height = 600

const canvas = createCanvas(width, height)
const ctx = canvas.getContext('2d')

ctx.fillStyle = '#fff'
ctx.fillRect(0, 0, width, height)

ctx.beginPath();
ctx.moveTo(0, 0);

let test = ['53.266179561615,54.9594819545746', '53.266179561615,54.9594819545746']
for (let index = 0; index < test.length; index++) {
    let coordinates = test[index]
    ctx.lineTo(coordinates)
    ctx.stroke()
}


const buffer = canvas.toBuffer('image/png')
fs.writeFileSync('./image.png', buffer)

如果我编写ctx.lineto(53.266179561615,54.9594819545746),它实际上可以工作。但是我的数组很长并且来自一个输入。

共有1个答案

周学义
2023-03-14
let test = ['53.266179561615,54.9594819545746', '53.266179561615,54.9594819545746']

是字符串数组,而ctx.lineTo(x,y)方法以两个数字作为参数。在您的代码中会发生以下情况:

for (let index = 0; index < test.length; index++) {
    let coordinates = test[index] 
    // coordinates is now '53.266179561615,54.9594819545746'
    ctx.lineTo(coordinates) 
    // you call ctx.lineTo('53.266179561615,54.9594819545746'), notice the qoutes.
    // That is a single argument, a string.
...

您可能希望使用坐标数组,这样就可以正确调用函数。

像这样:

let coordinates = [[53.266179561615,54.9594819545746], [53.266179561615,54.9594819545746]];
for (let index = 0; index < coordinates.length; index++) {
    let c = coordinates[index]
    ctx.lineTo(c[0], c[1])
    ctx.stroke()
}
 类似资料:
  • 有没有可能通过它们的方程式在画布中画出曲线呢?如果是,怎么做?假设我有一个数学方程y=0,5*x^2,如何打印方程的图形? 我尝试使用和方法,但未成功。

  • 在画布上画画是非常好的。即使橡皮擦也能工作得很好。问题是当画布保存为图像时,它画的是黑线,而不是橡皮擦。 为了更好地理解,我添加了屏幕、镜头和代码。 1.在擦除图的同时- 我不明白为什么橡皮移动被替换为黑色,而保存画布作为一个图像。

  • 实际上,我可以使用函数来完成。我从“HTML5画布-如何在图像背景上画一条线?”中得到的东西。但是我需要在不使用from函数的情况下绘制图像,如下所示:

  • 因此,我正在创建一个cordova应用程序,在该应用程序中,我从iphone库中拍摄一张照片,将其绘制到画布上,并向其添加另一张图像,以便将其保存为一张照片。到目前为止,我从iphone照片库中绘制的照片可以毫无问题地绘制到画布上,但是第二张图片没有。 当我加载第二张图像时,它首先被添加到具有绝对定位的div中,以便将其移动到我想要的任何位置。之后,我得到了实际的图像,它的来源和位置,并尝试将其绘

  • 请帮助我在Android SDK上实现同样的结果。

  • 我可以绘制图像,但我如何旋转该图像例如45度并绘制它,然后绘制另一个图像与-50度旋转在同一画布? 不适用于我,因为它会旋转所有画布内容。