ENOENT, No such file or directory при запуске программы на JS в VSCode
При попытке запуска кода программа выдает ошибку, что не по указанному пути нет фалов или данная директория отсутствует, хотя путь абсолютно правильный (но есть вопрос начет слэшей). Программа должна перебирать и накладывать друг на друга слои изображений.
Вот полный вывод программы:
PS C:\Users\Даня\Desktop\Labs\NFTv2> node index.js
pivet 1
C:\Users\Даня\Desktop\Labs\NFTv2\node_modules\canvas\lib\image.js:91
SetSource.call(img, src);
^
Error: ENOENT, No such file or directory 'C:\Users\Даня\Desktop\Labs\NFTv2\input/surf/Surf (7).png'
at setSource (C:\Users\Даня\Desktop\Labs\NFTv2\node_modules\canvas\lib\image.js:91:13)
at Image.set (C:\Users\Даня\Desktop\Labs\NFTv2\node_modules\canvas\lib\image.js:62:9)
at C:\Users\Даня\Desktop\Labs\NFTv2\node_modules\canvas\index.js:34:15
at new Promise (<anonymous>)
at loadImage (C:\Users\Даня\Desktop\Labs\NFTv2\node_modules\canvas\index.js:23:10)
at drawLayer (C:\Users\Даня\Desktop\Labs\NFTv2\index.js:16:25)
at C:\Users\Даня\Desktop\Labs\NFTv2\index.js:25:9
at Array.forEach (<anonymous>)
at Object.<anonymous> (C:\Users\Даня\Desktop\Labs\NFTv2\index.js:24:12)
at Module._compile (node:internal/modules/cjs/loader:1101:14) {
errno: 2,
code: 'ENOENT',
path: 'C:\\Users\\Даня\\Desktop\\Labs\\NFTv2\\input/surf/Surf (7).png',
syscall: 'fopen'
}
//config.js file
const fs = require("fs");
const width = 2048;
const height = 2048;
const dir = __dirname;
const cleanName = _str => {
let name = _str.slice(0, -4);
return name;
};
const getElements = path => {
return fs
.readdirSync(path)
.filter((item) => !/(^|\/)\.[^\/\.]/g.test(item))
.map((i, index) => {
return {
id: index + 1,
name: cleanName(i),
fileName: i,
//rarity: addRarity(i),
};
});
};
const layers = [
{
id: 1,
name: "background",
location: `${dir}/background/`,
elements: getElements(`${dir}/background/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
{
id: 2,
name: "surf",
location: `${dir}/surf/`,
elements: getElements(`${dir}/surf/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
{
id: 3,
name: "body",
location: `${dir}/body/`,
elements: getElements(`${dir}/body/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
{
id: 4,
name: "hat",
location: `${dir}/hat/`,
elements: getElements(`${dir}/hat/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
{
id: 5,
name: "eye",
location: `${dir}/eye/`,
elements: getElements(`${dir}/eye/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
{
id: 6,
name: "item",
location: `${dir}/item/`,
elements: getElements(`${dir}/item/`),
position: {x: 0, y: 0},
size: { width: width, height: height },
},
];
module.exports = { layers, width, height };
//index.js file
const fs = require("fs");
const { createCanvas, loadImage } = require("canvas");
const console = require("console");
const canvas = createCanvas(2048, 2048);
const ctx = canvas.getContext("2d");
const { layers, width, height } = require("./input/config.js");
const edition = 1;
const saveLayer = (_canvas, _edition) => {
fs.writeFileSync(`./output/${_edition}.png`, _canvas.toBuffer("image/png"));
console.log("created");
};
const drawLayer = async (_layer, _edition) => {
let element = _layer.elements[Math.floor(Math.random() * _layer.elements.length)];
const image = await loadImage(`${_layer.location}${element.fileName}`);
ctx.drawImage(image, image.position.x, image.position.x, image.size.width, image.size.height);
console.log(`I created ${_layer.name} layer, and choose element ${element.name}`);
saveLayer(canvas, _edition);
};
for(let i = 1; i <= edition; i++){
layers.forEach((layer) => {
drawLayer(layer, i);
});
console.log("pivet " + i);
}
Ответы (1 шт):
Автор решения: Данил
→ Ссылка
Я промучился с этим весь день, но проблему решил так: (скорее всего проблемы были с путём файла, а конкретно с пробелами и русскими символами в пути) Я изменил названия всех элементов, которые перебирались и убрал из них пробелы. Так же папку проекта я переместил с диска С на другой локальный диск, чтобы путь до папки был только из английских символов.