C# 压缩图片并保存到本地

ops/2025/2/6 5:08:59/

本文主要介绍如何使用C#将图片进行压缩并保存到本地。

接收一个原始图片的字节数组、需要保存的图片类型、输出路径和图片质量。方法首先将字节数组转换为一个内存流,然后使用Image.FromStream方法将内存流转换为一个Image对象。接下来,方法创建一个编码参数对象,设置图片的质量。之后,通过调用GetImageCodecInfo方法获取指定图片类型对应的编码器信息。最后,调用image.Save方法将压缩后的图片保存到指定的输出路径。

/// <summary>
/// 压缩图片byte数组并保存到本地
/// </summary>
/// <param name="bytes">原始图片byte数组</param>
/// <param name="format">需要保存图片的MIME类型</param>
/// <param name="outputPath">输出路径</param>
/// <param name="quality">图片质量0-100</param>
private void CompressImage(byte[] bytes, ImageFormat format, string outputPath, long quality)
{using (MemoryStream ms = new MemoryStream(bytes)){Image image = Image.FromStream(ms);// 创建一个编码参数对象EncoderParameters encoderParams = new EncoderParameters(1);encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality); // 100表示最高质量(无损)var pngCodec = GetImageCodecInfo(format);// 保存压缩后的图片image.Save(outputPath, pngCodec, encoderParams);}
}

接收一个原始图片的路径、输出路径和图片质量。方法首先使用Image.FromFile方法加载原始图片。之后,创建一个编码参数对象,设置图片的质量。接下来,通过调用GetImageCodecInfo方法获取原始图片的类型对应的编码器信息。最后,调用image.Save方法将压缩后的图片保存到指定的输出路径。

/// <summary>
/// 压缩图片并保存到本地
/// </summary>
/// <param name="inputPath">原始图片路径</param>
/// <param name="outputPath">输出路径</param>
/// <param name="quality">图片质量0-100</param>
private void CompressImage(string inputPath, string outputPath, long quality)
{// 加载原始图片using (Image image = Image.FromFile(inputPath)){// 创建一个编码参数对象EncoderParameters encoderParams = new EncoderParameters(1);encoderParams.Param[0] = new EncoderParameter(Encoder.Quality, quality); // 100表示最高质量(无损)var pngCodec = GetImageCodecInfo(image.RawFormat);// 保存压缩后的图片image.Save(outputPath, pngCodec, encoderParams);}
}

以下用于获取指定图片类型的编码器信息。方法首先调用ImageCodecInfo.GetImageEncoders()方法获取所有可用的编码器信息。然后,根据指定的图片类型匹配对应的编码器信息。如果指定的格式在已知的格式中不存在,返回默认的MIME类型。

/// <summary>
/// 设置图片扩展类型
/// </summary>
/// <param name="format">图片</param>
/// <returns></returns>
public ImageCodecInfo GetImageCodecInfo(ImageFormat format)
{ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();// 声明编码器ImageCodecInfo pngCodec;if (format.Equals(ImageFormat.Jpeg))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/jpeg");else if (format.Equals(ImageFormat.Png))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/png");else if (format.Equals(ImageFormat.Gif))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/gif");else if (format.Equals(ImageFormat.Bmp))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/bmp");else if (format.Equals(ImageFormat.Tiff))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/tiff");else if (format.Equals(ImageFormat.Icon))pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "image/x-icon");else// 如果格式未知,返回默认的 MIME 类型pngCodec = codecs.FirstOrDefault(codec => codec.MimeType == "application/octet-stream");return pngCodec;
}

http://www.ppmy.cn/ops/156057.html

相关文章

HarmonyOS:ArkWeb进程

ArkWeb是多进程模型,分为应用进程、Web渲染进程、Web GPU进程、Web孵化进程和Foundation进程。 说明 Web内核没有明确的内存大小申请约束,理论上可以无限大,直到被资源管理释放。 ArkWeb进程模型图 应用进程中Web相关线程(应用唯一) 应用进程为主进程。包含网络线程、Vi…

3. k8s二进制集群之负载均衡器高可用部署

Haproxy 和 Keepalived安装Haproxy配置文件准备Keepalived配置及健康检查启动Haproxy & Keepalived服务继续上一篇文章《K8S集群架构及主机准备》,下面介绍负载均衡器搭建过程 Haproxy 和 Keepalived安装 在负载均衡器两个主机上安装即可 apt install haproxy keepalived…

【Qt】Qt老版本解决中文乱码

修改Pro文件 Qt 老版本&#xff08;Qt5 MSVC2017&#xff0c;其他版本的可以试一试&#xff09;出现中文乱码&#xff0c;只要字符串中有中文就会乱码&#xff1a; 工具->选项->文本编辑器: 修改Pro文件 以上修改后若还乱码&#xff0c;则在项目中的 .pro 文件添加以…

一文讲解Java中的ArrayList和LinkedList

ArrayList和LinkedList有什么区别&#xff1f; ArrayList 是基于数组实现的&#xff0c;LinkedList 是基于链表实现的。 二者用途有什么不同&#xff1f; 多数情况下&#xff0c;ArrayList更利于查找&#xff0c;LinkedList更利于增删 由于 ArrayList 是基于数组实现的&#…

【OS】AUTOSAR架构下的Interrupt详解(下篇)

目录 3.代码分析 3.1中断配置代码 3.2 OS如何找到中断处理函数 3.3 Os_InitialEnableInterruptSources实现 3.4 Os_EnableInterruptSource 3.5 DisableAllInterrupts 3.5.1Os_IntSuspendCat1 3.5.2 Os_InterruptDisableAllEnter 3.5.3 Disable二类中断 3.5.4 Disable一…

AI大模型(二)基于Deepseek搭建本地可视化交互UI

AI大模型&#xff08;二&#xff09;基于Deepseek搭建本地可视化交互UI DeepSeek开源大模型在榜单上以黑马之姿横扫多项评测&#xff0c;其社区热度指数暴涨、一跃成为近期内影响力最高的话题&#xff0c;这个来自中国团队的模型向世界证明&#xff1a;让每个普通人都能拥有媲…

【python】python油田数据分析与可视化(源码+数据集)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 【python】python油田数据分析与可视化&#xff08…

Star300+ 开源项目Developer-RoadMap 计算机各领域学习路线图集大成者

一、开发者的“成长宝典”来了 你是否在编程的海洋中迷茫&#xff0c;不知该驶向何方&#xff1f;你是否渴望一份清晰的指南&#xff0c;引领你在开发者的道路上稳步前行&#xff1f;今天&#xff0c;就为大家带来一份堪称“成长宝典”的开源项目: https://github.com/kamran…