在 ASP.NET Core 中压缩并减少图像的文件大小

server/2025/3/4 0:56:00/

示例代码:https://download.csdn.net/download/hefeng_aspnet/90294127 

        在当今的数字时代,图像是 Web 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在保持图像质量的同时压缩和缩小上传图像的大小至关重要。在本文中,我们将探讨如何在 ASP.NET Core 应用程序中使用 ImageSharp 库来实现这一点。

先决条件

在深入研究解决方案之前,请确保您已满足以下条件:

        1、安装了 ASP.NET Core 开发工具的 Visual Studio 或 Visual Studio Code。
.NET 核心 SDK。
        2、ASP.NET Core 和 C# 的基本知识。
        3、在 ASP.NET Core 中压缩并减少图像文件大小

        首先,创建一个新的 ASP.NET Core Web API 应用程序或使用现有的应用程序。为了进行演示,我们将创建一个名为“ImageUploadWithCompress”的应用程序。

步骤 1.安装 ImageSharp 库
        我们将使用 ImageSharp 库来执行图像压缩。要安装它,请打开项目的终端并运行以下命令:Install-Package SixLabors.ImageSharp

步骤 2. 创建图像压缩服务
        在您的项目中,创建一个服务类来处理图像压缩。以下是一个示例服务类:

using SixLabors.ImageSharp.Formats.Jpeg;

namespace ImageUploadWithCompress
{
    public class ImageService
    {
        public async Task CompressAndSaveImageAsync(IFormFile imageFile, string outputPath, int quality = 75)
        {
            using var imageStream = imageFile.OpenReadStream();
            using var image = Image.Load(imageStream);
            var encoder = new JpegEncoder
            {
                Quality = quality, // Adjust this value for desired compression quality
            };

            await Task.Run(() => image.Save(outputPath, encoder));
        }
    }
}

上述方法负责压缩以表示的图像IFormFile并异步将压缩后的图像保存到指定的输出路径。

        (IFormFile imageFile, string outputPath, int quality = 75):这些是该方法的参数。

                1、IFormFile imageFile:此参数表示需要压缩的输入图像文件。IFormFile通常用于处理 Web 应用程序中的文件上传。
                2、string outputPath:此参数指定压缩图像的保存路径。
                3、int quality = 75:这是一个可选参数,默认值为 75。它决定了 JPEG 压缩的质量。您可以调整此值来控制压缩级别(值越高,质量越好,但文件大小越大;值越低,压缩程度越高,但质量越低)。

步骤3.压缩并保存上传的图像
        现在创建一个名为“ImageController”的控制器,用于处理文件上传,使用 ImageService 类压缩并保存上传的图像,同时保持原始文件完好无损。以下是示例:

using Microsoft.AspNetCore.Mvc;

namespace ImageUploadWithCompress.Controllers
{
    [Route("api/images")]
    [ApiController]
    public class ImageController : ControllerBase
    {
        public ImageController()
        {

        }

        [HttpPost("upload")]
        public async Task<IActionResult> UploadImage(IFormFile imageFile)
        {
            if (imageFile == null || imageFile.Length == 0)
            {
                // Handle invalid input
                return BadRequest("No file uploaded");
            }

            // Save the orginal file to compress
            var outputPath = Path.Combine("uploads", imageFile.FileName);
            var imageService = new ImageService();
            await imageService.CompressAndSaveImageAsync(imageFile, outputPath, 30);

            // We can save the original file as well if needed
            var originalFilePath = Path.Combine("uploads", "original_" + imageFile.FileName);
            using (var fileStream = new FileStream(originalFilePath, FileMode.Create))
            {
                await imageFile.CopyToAsync(fileStream);
            }

            // Return success response or perform further actions
            return Ok("Image uploaded and compressed.");
        }
    }
}

        通过遵循这些步骤,您可以有效地减少 ASP.NET Core 应用程序中上传图像的文件大小,而无需使用 zip 文件。图像压缩不仅可以节省存储空间,还可以通过减少图像的加载时间来提高 Web 应用程序的性能。

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。   


http://www.ppmy.cn/server/172208.html

相关文章

第十四届蓝桥杯:DFS之飞机降落

这道题&#xff0c;由于它的数据范围是非常小的&#xff0c;我们可以采取暴力搜索的措施&#xff0c;把每种情况都枚举出来&#xff0c;如果有能行的情况就返回true 同时我们也要学会剪枝&#xff0c;如果已经确认飞机不能降落&#xff0c;就不要往下再展开了 #include <i…

第十五站:循环神经网络(RNN)与长短期记忆网络(LSTM)

1. 循环神经网络&#xff08;RNN&#xff09;概述 RNN 是一种非常适合处理序列数据的神经网络。与传统的前馈神经网络不同&#xff0c;RNN 具有一个 循环连接&#xff0c;它可以 记住 前一个时刻的信息&#xff0c;并将其传递到当前时刻。 RNN 的工作原理&#xff1a; 输入序…

设计模式Python版 观察者模式

文章目录 前言一、观察者模式二、观察者模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组…

TCP 三次握手与四次挥手

TCP 三次握手与四次挥手知识总结 一、TCP 连接与断开的核心机制 1. 三次握手&#xff08;建立连接&#xff09; 目的&#xff1a; 建立客户端与服务端之间的双向传输通道&#xff0c;确保双方都能确认对方的接收和发送能力&#xff0c;为后续的数据传输奠定可靠基础。 流程…

【AIGC系列】3:Stable Diffusion模型原理介绍

AIGC系列博文&#xff1a; 【AIGC系列】1&#xff1a;自编码器&#xff08;AutoEncoder, AE&#xff09; 【AIGC系列】2&#xff1a;DALLE 2模型介绍&#xff08;内含扩散模型介绍&#xff09; 【AIGC系列】3&#xff1a;Stable Diffusion模型原理介绍 【AIGC系列】4&#xff1…

【网络安全 | 渗透测试】GraphQL精讲二:发现API漏洞

未经许可,不得转载。 推荐阅读:【网络安全 | 渗透测试】GraphQL精讲一:基础知识 文章目录 GraphQL API 漏洞寻找 GraphQL 端点通用查询常见的端点名称请求方法初步测试利用未清理的参数发现模式信息使用 introspection探测 introspection运行完整的 introspection 查询可视化…

阿里云服务器宝塔终端如何创建fastadmin插件

1. 进入宝塔终端 2. cd / 进入根目录 3. FastAdmin 可以通过命令行创建一个插件&#xff0c;首先我们将工作目录切换到我们的项目根目录&#xff0c;也就是think文件所在的目录。 cd /var/www/yoursite/ 4.然后我们在命令行输入 php think addon -a mydemo -c create …

目标检测——数据处理

1. Mosaic 数据增强 Mosaic 数据增强步骤: (1). 选择四个图像&#xff1a; 从数据集中随机选择四张图像。这四张图像是用来组合成一个新图像的基础。 (2) 确定拼接位置&#xff1a; 设计一个新的画布(输入size的2倍)&#xff0c;在指定范围内找出一个随机点&#xff08;如…