我试图将本 map 像加载到canvas元素,但它抛出了一个错误:

未能在"CanvasRenderingContext2D"上执行"drawImage":

当我用画布窗口画画或做一些事情时,它工作得很好,但当我try 使用image = Image(gImage.default)导入图像时,它会中断吗?我试着遵循为react on Next制作的教程.js,是因为它吗?

我的代码:

import React, { useRef, useEffect, useState } from "react";
import Image from "next/image";

const Canvas = (props) => {
    const canvasRef = useRef(null)
    // load image
    const gImage = require("../public/map.png")
    const image = Image(gImage.default)
    useEffect(() => {
        const someTry = () => {
        }
        const canvas = canvasRef.current
        const context = canvas.getContext('2d')
        // our first draw
        context.fillStyle = "#000000"
        context.fillRect(0, 0, context.canvas.width, context.canvas.height)
        console.log(image)
        someTry()

        // const mapImage = document.createElement('img')
        // mapImage.src = '../public/map.png'
        // context.drawImage(image, 0, 0)
        image.onload = () => {
            context.drawImage(image, 0, 0)
        }
    }, [])
    return <canvas ref={canvasRef} {...props} width={288} height={480} />
}

export default Canvas

我以为这和getStaticProps有关,但当我试图从那个里传递图像时,它说Image()方法并没有定义,所以有什么方法可以绕过它吗?为什么会这样?

推荐答案

您try 使用的Image构造函数不是来自next/image.您应该从导入中删除import Image from "next/image".

您还应该在useEffect中移动image变量初始化,并将图像的源设置为"/map.png".

import React, { useRef, useEffect } from "react";

const Canvas = (props) => {
    const canvasRef = useRef(null)

    useEffect(() => {
        const image = new Image()
        image.src = "/map.png"
        
        const canvas = canvasRef.current
        const context = canvas.getContext('2d')
        context.fillStyle = "#000000"
        context.fillRect(0, 0, context.canvas.width, context.canvas.height)
       
        image.onload = () => {
            context.drawImage(image, 0, 0)
        }
    }, [])

    return <canvas ref={canvasRef} {...props} width={288} height={480} />
}

export default Canvas

Javascript相关问答推荐

使用axios.获取实时服务器时的404响应

为什么我的includes声明需要整个字符串?

我不知道为什么setwritten包装promise 不能像我预期的那样工作

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

如何在不创建新键的情况下动态更改 map 中的项目?

CheckBox作为Vue3中的一个组件

为什么按钮会随浮动属性一起移动?

阿波罗返回的数据错误,但在网络判断器中是正确的

如何在Svelte中从一个codec函数中调用error()?

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

在表单集中保存更改时删除';禁用';

在验证和提交表单后使用useNavigate()进行react 重定向,使用带有加载器和操作的路由

在不扭曲纹理的情况下在顶点着色器中旋转UV

如何组合Multer上传?

有没有办法更改Chart.js 3.x.x中主要刻度的字体?

用另一个带有类名的div包装元素

将延迟加载的模块转换为Eager 加载的模块

通过ng-绑定-html使用插入的HTML中的函数

按下键盘上的空格键后,单词就会变色.我想在最后一封信之后立即给它们涂上 colored颜色

Mongoose DeleteOne()和DeleteMany()不工作