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

示例代码: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 应用程序的性能。
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。
相关文章:
在 ASP.NET Core 中压缩并减少图像的文件大小
示例代码:https://download.csdn.net/download/hefeng_aspnet/90294127 在当今的数字时代,图像是 Web 应用程序和用户体验不可或缺的一部分。但是,处理大型图像文件可能会导致网页加载缓慢和更高的存储费用。为了解决这个问题,在…...
网络流算法: Dinic算法
图论相关帖子 基本概念图的表示: 邻接矩阵和邻接表图的遍历: 深度优先与广度优先拓扑排序图的最短路径:Dijkstra算法和Bellman-Ford算法最小生成树二分图多源最短路径强连通分量欧拉回路和汉密尔顿回路网络流算法: Edmonds-Karp算法网络流算法: Dinic算法 环境要求 本文所用…...
【Godot4.3】自定义简易菜单栏节点ETDMenuBar
概述 Godot中的菜单创建是一个复杂的灾难性工作,往往无从下手,我也是不止一次尝试简化菜单的创建。 从自己去年的发明“简易树形数据”用于简化Tree控件获得灵感,于是尝试编写了用于表示菜单数据的EasyMenuData类,以及对应的纯文…...
如何杀死僵尸进程?没有那个进程?
在题主跑代码的时候遇到了这样一种很奇怪的问题: 可以看到显卡0没有跑任何程序但是还是被占据着大量显存,这种进程称为“僵尸进程”,并且当我想kill它的时候,出现下面这种情况: 查过各种资料,最后我的解决…...
Solana 核心概念全解析:账户、交易、合约与租约,高流量区块链技术揭秘!
目录 1.Solana 核心概念简述 1.1. 账户(Account) 1.2. 交易(Transaction) 1.3. 交易指令(Instruction) 1.4. SPL 代币 1.5. 合约(Program) 1.6. 租约(Rent&#x…...
Leetcode-853. Car Fleet [C++][Java]
目录 一、题目描述 二、解题思路 Leetcode-853. Car Fleethttps://leetcode.com/problems/car-fleet/description/ 一、题目描述 There are n cars at given miles away from the starting mile 0, traveling to reach the mile target. You are given two integer array …...
012 rocketmq事务消息
文章目录 事务消息概念介绍交互流程事务消息原理TransactionListener接⼝TransactionProducer.javaTransactionConsumer.java 事务消息 内置topic中的消息对消费者不可见 本地事务mq消息事务消息 消息队列 RocketMQ 版提供的分布式事务消息适⽤于所有对数据最终⼀致性有强需求…...
ChatGPT与DeepSeek:开源与闭源的AI模型之争
目录 一、模型架构与技术原理 二、性能能力与应用场景 三、用户体验与部署灵活性 四、成本与商业模式 五、未来展望与市场影响 六、总结 随着人工智能技术的飞速发展,ChatGPT和DeepSeek作为两大领先的AI语言模型,成为了行业内外关注的焦点。它们在…...
Ollama的底层实现原理分析
一、背景 Ollama我们可以很方便的对DeepSeek等开源大模型进行部署,几条命令便能部署一个本地大模型服务,降低了非专业大模型开发者的门槛。 我们从中可以看到类似Docker的影子,ollama run 、ollama list等等,拉取对应大模型镜像&a…...
nginx 动态计算拦截非法访问ip
需求:在Nginx上实现一个动态拦截IP的方法,具体是当某个IP在1分钟内访问超过60次时,将其加入Redis并拦截,拦截时间默认1天。 技术选型:使用NginxLuaRedis的方法。这种方案通过Lua脚本在Nginx处理请求时检查Redis中的黑…...
商业秘密维权有哪些成本开支?
企业商业秘密百问百答之六十三:商业秘密维权费用项目有哪些? 在商业秘密维权过程中,原告可能需要支付多种费用,一般费用项目包括: 1、诉讼费。诉讼费是向法院支付的费用,包括起诉费、案件受理费等。这些费…...
使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法
使用UA-SPEECH和TORGO数据库验证自动构音障碍语音分类方法 引言 原文:On using the UA-Speech and TORGO databases to validate automatic dysarthric speech classification approaches 构音障碍简介 构音障碍是一种由于脑损伤或神经疾病(如脑瘫、肌萎缩侧索硬化症、帕金森…...
WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口
WebSocketHandler 是 Spring Framework 中用于处理 WebSocket 通信的接口,其主要作用是定义了如何处理 WebSocket 的各种事件和消息。以下是 WebSocketHandler 的主要作用和功能: ### 1. 处理 WebSocket 生命周期事件 WebSocketHandler 定义了多个方法来…...
Pikachu
一、网站搭建 同样的,先下载安装好phpstudy 然后启动Apache和Mysql 然后下载pikachu,解压到phpstudy文件夹下的www文件 然后用vscode打开pikachu中www文件夹下inc中的config.inc.php 将账户和密码改为和phpstudy中的一致(默认都是root&…...
如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程
如何使用 Jenkins 实现 CI/CD 流水线:从零开始搭建自动化部署流程 在软件开发过程中,持续集成(CI)和持续交付(CD)已经成为现代开发和运维的标准实践。随着代码的迭代越来越频繁,传统的手动部署方式不仅低效,而且容易出错。为了提高开发效率和代码质量,Jenkins作为一款…...
Vue.js 学习笔记
文章目录 前言一、Vue.js 基础概念1.1 Vue.js 简介1.2 Vue.js 的特点1.3 Vue.js 基础示例 二、Vue.js 常用指令2.1 双向数据绑定(v-model)2.2 条件渲染(v-if 和 v-show)2.3 列表渲染(v-for)2.4 事件处理&am…...
数据存储:一文掌握RabbitMQ的详细使用
文章目录 一、RabbitMQ简介二、RabbitMQ的概述2.1 基本概念2.2 实际应用场景三、RabbitMQ的安装与配置3.1 安装RabbitMQ3.2 启用管理插件四、使用Python操作RabbitMQ4.1 安装Pika库4.2 生产者示例4.3 消费者示例4.4 发布/订阅模式示例五、RabbitMQ的高级特性5.1 消息持久化5.2 …...
辛格迪客户案例 | 祐儿医药科技GMP培训管理(TMS)项目
01 项目背景:顺应行业趋势,弥补管理短板 随着医药科技行业的快速发展,相关法规和标准不断更新,对企业的质量管理和人员培训提出了更高要求。祐儿医药科技有限公司(以下简称“祐儿医药”)作为一家专注于创新…...
FreeRtos实时系统: 十六.tickless低功耗模式
FreeRtos实时系统: 十六.tickless低功耗模式 一.tickless低功耗模式简介二.tickless模式详解三.tickless模式相关配置项四.tickless低功耗模式实验五.课堂总结 一.tickless低功耗模式简介 STM32低功耗模式: 二.tickless模式详解 为了可以降低功耗,又不…...
CSDN博客:Markdown编辑语法教程总结教程(上)
❤个人主页:折枝寄北的博客 Markdown编辑语法教程总结 前言1. CSDN Markdown编辑器功能简介1.1 基础操作界面1.2 创作助手和语法说明 2. Markdown编辑器语法2.1 目录2.2 标题2.2.1 标题级别设置2.2.2 标题居中 3. 文本样式3.1 强调文本(斜体)…...
微软Phi-3-mini保姆级教程:一键部署,快速体验文本生成
微软Phi-3-mini保姆级教程:一键部署,快速体验文本生成 1. 镜像简介与特点 1.1 模型背景 Phi-3-mini-4k-instruct-gguf是微软推出的轻量级文本生成模型,属于Phi-3系列中的高效版本。这个模型特别适合处理问答、文本改写、摘要整理等常见文本…...
Real-Time-Person-Removal 终极性能优化指南:10个技巧让实时处理速度翻倍
Real-Time-Person-Removal 终极性能优化指南:10个技巧让实时处理速度翻倍 【免费下载链接】Real-Time-Person-Removal Removing people from complex backgrounds in real time using TensorFlow.js in the web browser 项目地址: https://gitcode.com/gh_mirrors…...
Linux 软件安装没你想的那么简单:为什么有的软件能直接跑,有的非装不可?
Linux 软件安装没你想的那么简单:为什么有的软件能直接跑,有的非装不可? 很多人刚接触 Linux 的时候,对“安装软件”这件事有点迷。 在 Windows 上,大家已经习惯了: 双击一个 exe一路“下一步”软件出现在桌…...
深入解析Xilinx PCIe IP核示例工程的仿真与调试技巧
1. Xilinx PCIe IP核示例工程快速入门 第一次接触Xilinx PCIe IP核时,我完全被复杂的文件结构和专业术语搞懵了。后来发现,只要掌握几个关键点,就能快速上手这个强大的高速串行通信接口。PCIe(Peripheral Component Interconnect …...
MicroPython-lib终极指南:嵌入式Python开发者的完整资源库
MicroPython-lib终极指南:嵌入式Python开发者的完整资源库 【免费下载链接】micropython-lib Core Python libraries ported to MicroPython 项目地址: https://gitcode.com/gh_mirrors/mi/micropython-lib MicroPython-lib是专为MicroPython设计的完整标准库…...
Phi-4-reasoning-vision-15B实操手册:强约束提示词设计与错误行为规避
Phi-4-reasoning-vision-15B实操手册:强约束提示词设计与错误行为规避 1. 引言:当视觉模型“自作主张”时,我们该怎么办? 你上传了一张软件界面的截图,想问问某个按钮是干什么用的。结果模型没回答你的问题ÿ…...
机器学习周报三十九
文章目录摘要Abstract1.TurboDiffusion1.1 注意力改进1.2蒸馏模型1.3权重量化2 训练和推理2.1 训练阶段2.2 推理阶段3 Make It Count3.1数据集3.2损失函数总结摘要 本周阅读了清华大学的论文《TurboDiffusion: Accelerating Video Diffusion Models by 100–200 Times》&#…...
OpenClaw移动办公:Qwen3-4B模型通过钉钉审批报销单
OpenClaw移动办公:Qwen3-4B模型通过钉钉审批报销单 1. 为什么选择OpenClaw处理报销流程? 去年夏天,我因为频繁出差积累了大量纸质发票,每次手工录入报销系统都要耗费整个下午。直到发现OpenClaw这个开源自动化框架,才…...
电动汽车模型考虑多种需求响应及微网的虚拟电厂日前优化调度模型的MATLAB代码(含空调负荷)
MATLAB代码:含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度 关键词:需求响应 空调负荷 电动汽车 微网优化调度 虚拟电厂调度 仿真平台:MATLABCPLEX 主要内容:代码主要做的是一个微网/虚拟电厂的日前优化调度模型&#…...
别再只会用na.omit删数据了!R语言缺失值处理保姆级教程:从均值填补到随机森林实战
R语言缺失值处理实战:从基础填补到随机森林的完整指南 第一次拿到带有缺失值的数据集时,大多数人的本能反应是直接删除那些不完整的记录。这种简单粗暴的做法看似省事,却可能让你的分析结果偏离真实情况。想象一下,你正在分析一组…...
