Spaces:
Paused
Paused
| // https://github.com/salismazaya/whatsapp-bot | |
| const fs = require("fs"); | |
| const FileType = require('file-type'); | |
| const { exec } = require("child_process"); | |
| if (!fs.existsSync("/tmp")) fs.mkdirSync("/tmp"); | |
| function imageToWebp(bufferImage) { | |
| return new Promise((resolve, reject) => { | |
| FileType.fromBuffer(bufferImage) | |
| .then((response) => { | |
| try { | |
| const pathFile = "/tmp/" + Math.floor(Math.random() * 1000000 + 1) + "." + response.ext; | |
| fs.writeFileSync(pathFile, bufferImage); | |
| exec(`cwebp -q 50 ${pathFile} -o ${pathFile}.webp`, (error, stdout, stderr) => { | |
| if (!fs.existsSync(pathFile + ".webp")) { | |
| reject(new Error("failed convert file!")); | |
| fs.unlinkSync(pathFile); | |
| return; | |
| } | |
| const webpBufferImage = fs.readFileSync(pathFile + ".webp"); | |
| fs.unlinkSync(pathFile); | |
| fs.unlinkSync(pathFile + ".webp"); | |
| resolve(webpBufferImage); | |
| }); | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }) | |
| .catch(e => reject(e)); | |
| }); | |
| } | |
| function webpToJpg(bufferImage) { | |
| return new Promise((resolve, reject) => { | |
| try { | |
| const pathFile = "/tmp/" + Math.floor(Math.random() * 1000000 + 1) + ".webp"; | |
| fs.writeFileSync(pathFile, bufferImage); | |
| exec(`dwebp ${pathFile} -o ${pathFile}.jpg`, (error, stdout, stderr) => { | |
| if (!fs.existsSync(pathFile + ".jpg")) { | |
| reject(new Error("failed convert file!")); | |
| fs.unlinkSync(pathFile); | |
| return; | |
| } | |
| const jpgBufferImage = fs.readFileSync(pathFile + ".jpg"); | |
| fs.unlinkSync(pathFile); | |
| fs.unlinkSync(pathFile + ".jpg"); | |
| resolve(jpgBufferImage); | |
| }) | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }); | |
| } | |
| function gifToWebp(bufferImage) { | |
| return new Promise((resolve, reject) => { | |
| try { | |
| const pathFile = "/tmp/" + Math.floor(Math.random() * 1000000 + 1) + ".gif"; | |
| fs.writeFileSync(pathFile, bufferImage); | |
| exec(`gif2webp ${pathFile} -o ${pathFile}.webp`, (error, stdout, stderr) => { | |
| if (!fs.existsSync(pathFile + ".webp")) { | |
| reject(new Error("failed convert file!")); | |
| fs.unlinkSync(pathFile); | |
| return; | |
| } | |
| const webpBuffer = fs.readFileSync(pathFile + ".webp"); | |
| fs.unlinkSync(pathFile); | |
| fs.unlinkSync(pathFile + ".webp"); | |
| resolve(webpBuffer); | |
| }) | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }); | |
| } | |
| function webpToVideo(bufferImage) { | |
| return new Promise((resolve, reject) => { | |
| try { | |
| const pathFile = "/tmp/" + Math.floor(Math.random() * 1000000 + 1) + ".webp"; | |
| fs.writeFileSync(pathFile, bufferImage); | |
| exec(`convert ${pathFile} ${pathFile}.gif`, (error, stdout, stderr) => { | |
| exec(`ffmpeg -i ${pathFile}.gif -movflags faststart -pix_fmt yuv420p -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" ${pathFile}.mp4`, (error, stdout, stderr) => { | |
| if (!fs.existsSync(pathFile + ".gif") || !fs.existsSync(pathFile + ".mp4")) { | |
| reject(new Error("failed convert file!")); | |
| fs.unlinkSync(pathFile); | |
| return; | |
| } | |
| const videoBuffer = fs.readFileSync(pathFile + ".mp4"); | |
| fs.unlinkSync(pathFile); | |
| fs.unlinkSync(pathFile + ".gif"); | |
| fs.unlinkSync(pathFile + ".mp4"); | |
| resolve(videoBuffer); | |
| }); | |
| }); | |
| } catch(e) { | |
| reject(e); | |
| } | |
| }); | |
| } | |
| module.exports = { imageToWebp, webpToJpg, gifToWebp, webpToVideo } |