server-json/api_v1/altri/photo1.js
2024-11-01 08:00:42 +00:00

108 lines
No EOL
3.2 KiB
JavaScript

const fs = require('fs');
const path = require('path');
const ExifReader = require('exifreader');
const sharp = require('sharp');
var productsDatabase = { photos: []}
var i = 1;
var s = 0;
//console.log("start search");
async function searchFile(dir, fileExt) {
s++;
// read the contents of the directory
const files = fs.readdirSync(dir);
// search through the files
for (let k = 0; k < files.length; k++) {
file = files[k];
const filePath = path.join(dir, file);
// get the file stats
const fileStat = fs.statSync(filePath);
// if the file is a directory, recursively search the directory
if (fileStat.isDirectory()) {
await searchFile(filePath, fileExt);
} else if (path.extname(file).toLowerCase() == fileExt) {
// if the file is a match, print it
var dd = dir.split("/");
var d = dd.slice(1);
var d1 = dd.slice(1);
d1[1]= "thumbs";
var ff = file.split(".");
var fn = ff.slice(0,-1).join(".");
var f1 = fn+'_min'+'.'+ff.at(-1);
var f2 = fn+'_avg'+'.'+ff.at(-1);
var f3 = fn+'_sharp'+'.'+ff.at(-1);
var extFilePath = path.join(d.join("/"),file);
var extThumbMinPath = path.join(d1.join("/"),f1);
var extThumbAvgPath = path.join(d1.join("/"),f2);
var extThumbSharpPath = path.join("public",d1.join("/"),f3);
var thumbMinPath = path.join("public",extThumbMinPath);
var thumbAvgPath = path.join("public",extThumbAvgPath);
var dt = path.join("public",d1.join("/"));
if (!fs.existsSync(dt)){
fs.mkdirSync(dt, { recursive: true });
}
var data;
try {
data = fs.readFileSync(filePath);
} catch (err) {
//console.error(err);
}
const tags = await ExifReader.load(filePath, {expanded: true});
//console.log(tags);
var time = tags.exif.DateTimeOriginal;
if (time === undefined){} else {time=time.value[0]}
var gps = tags['gps'];
//if (time === undefined ){console.log(filePath)}
//console.log("read: "+filePath);
await sharp(data)
.resize(100,100,"inside")
.withMetadata()
.toFile(thumbMinPath, (err, info) => {});
await sharp(data)
.resize(400)
.withMetadata()
.toFile(thumbAvgPath, (err, info) => {});
console.log(i+" - "+file);
productsDatabase.photos.push({
id: i,
name: file,
path: extFilePath,
thub1: extThumbMinPath,
thub2: extThumbAvgPath,
gps: tags['gps'],
data: time
});
i++;
}
if(k == files.length-1) {
if (s == 1) {
fs.writeFileSync("api_v1/db.json", JSON.stringify(productsDatabase));
//console.log("finito");
//console.log(productsDatabase);
} else {
s--;
}
}
}
}
async function thumb(filePath, opt){
try {
const thumbnail = await imageThumbnail(filePath, opt);
//console.log(thumbnail);
return thumbnail;
} catch (err) {
//console.error(err);
}
}
// start the search in the current directory
async function run(){
await searchFile('./public/photos/original', '.jpg');
//console.log(JSON.stringify(productsDatabase))
}
run()