[Node.js] Apply image filter on Express

复制代码
import fs from 'fs';
import Jimp = require('jimp');

// filterImageFromURL
// helper function to download, filter, and save the filtered image locally
// returns the absolute path to the local image
// INPUTS
//    inputURL: string - a publicly accessible url to an image file
// RETURNS
//    an absolute path to a filtered image locally saved file
export async function filterImageFromURL(inputURL: string): Promise<string>{
    return new Promise( async resolve => {
        const photo = await Jimp.read(inputURL);
        const outpath = '/tmp/filtered.'+Math.floor(Math.random() * 2000)+'.jpg';
        await photo
        .resize(256, 256) // resize
        .quality(60) // set JPEG quality
        .greyscale() // set greyscale
        .write(__dirname+outpath, (img)=>{
            resolve(__dirname+outpath);
        });
    });
}

// deleteLocalFiles
// helper function to delete files on the local disk
// useful to cleanup after tasks
// INPUTS
//    files: Array<string> an array of absolute paths to files
export async function deleteLocalFiles(files:Array<string>){
    for( let file of files) {
        fs.unlinkSync(file);
    }
}
复制代码

 

Endpoint:

复制代码
  app.get('/filteredimage', async (req: Request, res: Response) => {
    const {image_url} = req.query;
    if (!image_url) {
      return res.status(422).send({
        message: `image_url query param is required`
      })
    }
    const filtered_img_path = await filterImageFromURL(image_url.toString())
    res.sendFile(filtered_img_path);
    allFiles.push(filtered_img_path);
  })
复制代码

 

We want to delete previously generate files from local, this can be done by using middleware:

复制代码
  let allFiles: string[] = [];
  const cleanUp = (req: Request, res: Response, next: NextFunction) => {
    const sendFile = res.sendFile.bind(res);
    res.sendFile = (body: any) => {
      sendFile(body);
      deleteLocalFiles(allFiles)
      allFiles = [];
    }
    next();
  }

  app.use('/', cleanUp)
复制代码

 

posted @   Zhentiw  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-03-28 [Node.js] process.nextTick for converting sync to async
2019-03-28 [Algorithm] Print 2-D array in spiral order
2017-03-28 [Grid Layout] Use auto-fill and auto-fit if the number of repeated grid tracks is not to be def
2017-03-28 [Grid Layout] Use the repeat function to efficiently write grid-template values
2017-03-28 [Grid Layout] Use the minmax function to specify dynamically-sized tracks
2017-03-28 [Jest] Snapshot
2017-03-28 [Flow] More tips about Flow
点击右上角即可分享
微信分享提示