Files
kspguti-schedule/src/shared/data/teachers-photos/scripts/crop.mjs
2023-10-01 23:04:01 +04:00

47 lines
1.3 KiB
JavaScript

import fs from 'fs/promises'
import path from 'path'
import sharp from 'sharp'
import { dirname } from 'path'
import { fileURLToPath } from 'url'
const __dirname = dirname(fileURLToPath(import.meta.url)) + '/'
async function cropImages(imagePaths) {
try {
await fs.mkdir(__dirname + '../cropped')
} catch (err) {
if (err.code !== 'EEXIST') {
console.error('Failed to create directory:', err)
return
}
}
for (const imagePath of imagePaths) {
const imageFileName = path.basename(imagePath)
const outputFileName = `${__dirname}../cropped/${imageFileName}`
try {
const image = sharp(imagePath)
const metadata = await image.metadata()
const minDimension = Math.min(metadata.width, metadata.height)
await image
.extract({ left: 0, top: 0, width: minDimension, height: minDimension })
.resize(96, 96, { fit: 'contain' })
.toFile(outputFileName)
console.log(`Successfully cropped ${imageFileName}`)
} catch (err) {
console.error(`Failed to crop ${imageFileName}:`, err)
}
}
}
const files = await fs.readdir(__dirname + '../sources')
const imagePaths = files
.filter(f => f.toLowerCase().endsWith('.jpg') || f.toLowerCase().endsWith('.png'))
.map(f => __dirname + '../sources/' + f)
await cropImages(imagePaths)