canvas里的loadImage路径不支持中文

107 阅读1分钟

今天用canvas绘制图片,但因为提供的图片名带了中文(自己也懒得改),就打算这么将就着用的时候,突然发现canvas报错

Error: Error: Failed to draw birthday photo: No such file or directory

image.png

开始怀疑是不是自己写错了路径,一个字母一个字母对过来,一点毛病都没有,把自己的嫌疑排除了。

但是很奇怪,用相同路径下其他图片又可以,就这张图片不行,但唯一的不同好像只有文件名,我把文件名改成了one,发现就可以了。

于是乎,我猜测就是因为路径带了中文字符导致的,结果一搜,发现有人21年就出现过这个问题,loadImage不支持中文路径,所以,找了两种解决措施:


笨办法

一个个改文件名,最合理,但是最痛苦(涉及到的文件实在是有点多)

简单办法

直接通过fs读取文件,再进行img的加载

const image = await new Promise((res, rej) => { 
    fs.readFile('/Users/哈哈哈哈哈/test.png', (err, buf) => { 
        if (err) rej(err); 
        const img = new Image(); 
        img.onload = () => { 
            res(img) 
        }; 
        img.onerror = (err) => { 
            rej(err) 
        }; 
        img.src = buf; 
    }); 
});