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

devtools/2025/3/4 9:06:35/

示例代码: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/devtools/164419.html

相关文章

Docker + Vue2 热重载:为什么需要 CHOKIDAR_USEPOLLING=true?

在 Docker 中运行 Vue 2 项目时&#xff0c;许多开发者会遇到 代码修改后热重载&#xff08;Hot Reload&#xff09;失效的问题。虽然 Vue 2 默认支持热重载&#xff0c;但由于 Docker 文件监听机制的特殊性&#xff0c;Webpack 的 watch 机制可能无法正常工作。 本文将深入解析…

分布式和微服务的理解

分布式系统和微服务是现代化软件架构中两个关键概念&#xff0c;它们共同支撑了高可用、高扩展的互联网应用&#xff0c;但侧重点和解决的问题有所不同。以下是它们的核心理解&#xff1a; ​一、分布式系统&#xff08;Distributed System&#xff09;​ 定义&#xff1a; 分…

远古RNA引导系统:基因编辑疗法的新希望?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

请说一下你对分布式和微服务的理解

分布式系统 定义&#xff1a; 分布式系统由多个独立计算机&#xff08;节点&#xff09;组成&#xff0c;这些节点通过网络通信协作完成任务&#xff0c;对外表现为一个整体。 特点&#xff1a; 分布性&#xff1a;节点分布在不同的物理位置。 并发性&#xff1a;多个节点可…

如何将hf-mirror.com作为vllm默认的下载源? conda如何移除虚拟环境?conda 如何复制一份虚拟环境?

前言 上回咱说道,如果你没办法访问huggingface.co,则可以把modelscope作为vllm默认的下载源。 但如果你非得用你用不了的huggingface.co呢?那你可以考虑将hf-mirror.com作为vllm默认的下载源。这里,hf-mirror.com和huggingface.co的效果是一样的。 要将hf-mirror.com设为v…

实战 Elasticsearch:快速上手与深度实践-2.2.2线程池配置与写入限流

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 Elasticsearch批量写入性能调优&#xff1a;2.2.2 线程池配置与写入限流深度实践1. 线程池核心机制解析1.1 Elasticsearch线程池架构1.2 Bulk线程池工作模型 2. 写入场景线程…

LeetCode 21. 合并两个有序链表(Python)

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;[] 示例 3&#xff1a; 输…

蓝桥备赛(六)- C/C++输入输出

一、OJ题目输入情况汇总 OJ&#xff08;online judge&#xff09; 接下来会有例题 &#xff0c; 根据一下题目 &#xff0c; 对这些情况进行分析 1.1 单组测试用例 单在 --> 程序运行一次 &#xff0c; 就处理一组 练习一&#xff1a;计算 (ab)/c 的值 B2009 计算 (ab)/c …