当前位置: 首页 > 知识库问答 >
问题:

Jimp处理图像后下载图像文件

钱建本
2023-03-14

我有回家的路线。在这个主路由中,我使用Jimp库来处理图像,调整它的大小,然后更改质量,最后将图像保存在目录中,但我想下载图像,以便用户可以在他的机器上下载。但它没有下载。我正确地保存在名为output.jpg的目录中。这是密码

app.get(“/”,(req,res)=>{

res.type(“jpg”);RES.Attachment(“output.jpg”)

jimp.read('lenna.png',(err,lenna)=>{if(err)throw err;lenna.resize(256,256)//resize.quality(60)//设置JPEG quality.greyscale()//设置greyscale.write('output.jpg');//保存

Res.Download(“output.jpg”);});

共有1个答案

林德华
2023-03-14

当尝试重现您的错误时,我在向节点服务器发送html" target="_blank">请求时在浏览器中下载了一个jpg文件,但这个文件似乎有问题。原因是jimp.write()是一个异步函数,因此

res.download('output.jpg')

在jimp.write()将文件写入磁盘之前执行。要在文件完全写入磁盘后发送文件,您有两个使用jimp.write的选项,这里提供了文档

下面是我的快速代码来重现和修复这个问题

使用带有回调的jimp.write

const express = require('express')
const app = express()
var jimp = require('jimp');

app.get("/", (req, res) => {
    res.type('jpg');
    res.attachment('output.jpg');
    jimp.read('lenna.png', (err, lenna) => {
        if (err) throw err; 
        lenna.resize(256, 256) // resize
        .quality(60) // set JPEG quality
        .greyscale() // set greyscale
        .write('output.jpg', res.download('output.jpg')); // save
    });
});

app.listen(3000);

重要的是将res.download()放入jimp.write()的回调中,当jimp将文件写入磁盘时,该回调将执行。

.write('output.jpg', res.download('output.jpg')); // save

使用返回承诺的jimp.writeasync

const express = require('express')
const app = express()
var jimp = require('jimp');

app.get("/", (req, res) => {
    res.type('jpg');
    res.attachment('output.jpg');
    jimp.read('lenna.png', async (err, lenna) => {
        if (err) throw err; 
        await lenna.resize(256, 256) // resize
        .quality(60) // set JPEG quality
        .greyscale() // set greyscale
        .writeAsync('output.jpg'); // save
        res.download('output.jpg');
    });
});

app.listen(3000);

使用async并等待Lenna.(...).WriteAsync('output.jpg')完成并解析返回的承诺

 类似资料:
  • 大多数图像处理和操作技术可以使用两个库进行有效的处理:Python Imaging Library (PIL) 和 OpenSource Computer Vision (OpenCV)。 下面来简单介绍一下这两个库。 Python 图像库 Python 图像库, 全称为 Python Imaging Library,简称PIL,是Python图像操作的核心库之一。遗憾的是,PIL 的开发工作已经

  • Tensorflow封装了很多图像处理的操作,包括读取图像、图像处理、写图像到文件等等。在批量处理图像时,Tensorflow要求所有的图像都要有相同的Size,即$$(height,width,channels)$$。 读取图像 %matplotlib inline import tensorflow as tf import numpy as np #mil.use('svg') mil.us

  • 安装扩展 使用Composer安装ThinkPHP5的图像处理类库: composer require topthink/think-image 图像操作 下面来看下图像操作类的基础方法。 打开图像文件 假设当前入口文件目录下面有一个image.png文件,如图所示: 使用open方法打开图像文件进行相关操作: $image = \think\Image::open('./image.png');

  • 我想知道是否有人试图使用类固醇应用程序拍摄图像,并通过api将其发布到后端? 我在他们自己的文档中发现的唯一关于图像处理的事情是如何捕获图像以及如何以base64编码保存它们,但是我如何使用base64编码的图像,并且是否可以通过api发布它们? 代码示例: $ scope . start capture = function(){ navigator . Camera . get picture

  • 主要内容:GD 库PHP 提供了丰富的图像处理函数,主要包括: 函数 描述 gd_info() 取得当前安装的 GD 库的信息 getimagesize() 获取图像信息 getimagesizefromstring() 获取图像信息 image_type_to_extension() 获取图片后缀 image_type_to_mime_type() 返回图像的 MIME 类型 image2wbmp() 输出WBM

  • Matplotlib 软件包中的 模块提供了加载、缩放和显示图像的功能,该模块只能支持 PNG 格式的图片,如果格式不符,需要对图片的格式进行转换。 Matplotlib 支持的图片格式非常有限,所以通常情况下,建议采用 Python 图像处理库 Pillow 来处理图像,若感兴趣可以自行了解。 下面示例,imread() 函数用于读取图像数据并形成 ndarray 数组 ,其数据类型为 floa