今天用canvas绘制图片,但因为提供的图片名带了中文(自己也懒得改),就打算这么将就着用的时候,突然发现canvas报错
Error: Error: Failed to draw birthday photo: No such file or directory
开始怀疑是不是自己写错了路径,一个字母一个字母对过来,一点毛病都没有,把自己的嫌疑排除了。
但是很奇怪,用相同路径下其他图片又可以,就这张图片不行,但唯一的不同好像只有文件名,我把文件名改成了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;
});
});