1
0
Fork 0
forked from Simnation/Main
Main/resources/[creator]/dealerships_creator/utils/misc/misc.js
2025-06-07 08:51:21 +02:00

81 lines
No EOL
2.2 KiB
JavaScript

const fs = require('fs')
const Jimp = require('jimp')
const webp = require('webp-converter');
async function convertToWebP(inputPath) {
try {
if (!fs.existsSync(inputPath)) {
throw new Error(`File doesn't exist: ${inputPath}`);
}
const outputWebp = inputPath.replace(/\.png$/, '.webp');
await webp.cwebp(inputPath, outputWebp, "-lossless", "-mt");
return outputWebp;
} catch (err) {
console.error(`[convertToWebP] Error: ${err.message}`);
return null;
}
}
async function cleanImage(inputPath, outputPath, threshold = 150) {
if (!fs.existsSync(inputPath)) return false
try {
const img = await Jimp.read(inputPath)
const { width, height } = img.bitmap
const leftEx = Math.floor(width * 0.10)
const rightEx = Math.floor(width * 0.90)
const topEx = Math.floor(height * 0.10)
const bottomEx = Math.floor(height * 0.90)
let minX = width, minY = height, maxX = 0, maxY = 0
const bgR = 0, bgG = 255, bgB = 0
img.scan(0, 0, width, height, (x, y, idx) => {
if (x < leftEx || x > rightEx || y < topEx || y > bottomEx) {
img.bitmap.data[idx + 3] = 0
return
}
const r = img.bitmap.data[idx]
const g = img.bitmap.data[idx + 1]
const b = img.bitmap.data[idx + 2]
const dist = Math.sqrt((r - bgR) ** 2 + (g - bgG) ** 2 + (b - bgB) ** 2)
if (dist < threshold) {
img.bitmap.data[idx + 3] = 0
} else {
if (x < minX) minX = x
if (y < minY) minY = y
if (x > maxX) maxX = x
if (y > maxY) maxY = y
}
})
if (maxX > minX && maxY > minY) {
const w = maxX - minX + 1
const h = maxY - minY + 1
const m = 0.05
const exW = Math.floor(w * m)
const exH = Math.floor(h * m)
const cX = Math.max(0, minX - exW)
const cY = Math.max(0, minY - exH)
const cW = Math.min(width - cX, w + exW * 2)
const cH = Math.min(height - cY, h + exH * 2)
img.crop(cX, cY, cW, cH)
}
await img.writeAsync(outputPath)
await convertToWebP(outputPath)
// Cancella l'immagine originale (non-webp)
fs.unlinkSync(inputPath)
return true
} catch (e) {
console.error(`[cleanImage] Error: ${e}`)
return false
}
}
exports('cleanImage', cleanImage);