C# 图片压缩处理

今天老大让做一个图片压缩功能,自己在网上找了一些解决方法,也同时对方法进行了提炼!

在下面的代码中会有一个字段Encoder.Quality 字段,这个对应的有个一个values是神奇的值

MSDN解释是:Quality 类别将指定的图像压缩级别。 在用于构造 EncoderParameter, ,质量类别的有用值的范围是从 0 到 100。 指定的数字越,越高压缩和图像质量也因此越低。 零将为您提供最低的图像质量和 100 最高。

当将一个参数传递给图像编码器中时,将参数封装在 EncoderParameter 对象。 域中的一个 EncoderParameter 对象是指定的参数的类别的 GUID。 使用的静态字段 Encoder 类来检索 Encoder ,其中包含参数的所需类别。

内置的图像编码器 GDI+ 接收属于多个类别的参数。 下表列出了所有类别,每个类别关联的 GUID。

这里写图片描述

里面有6个方法,如下

方法作用方法名
按质量比和尺寸收缩呗数,生成缩略图,保存为另外路劲getThumImage(String sourceFile, long quality, int multiple, String outputFile)
按质量比和尺寸收缩呗数,生成缩略图;保存在同一路径getThumImage(String sourceFile, long quality, int multiple)
按图片尺寸大小压缩图片 ,保存在不同路径ImageByMultiple(String sourceFile, int multiple, String outputFile)
按图片尺寸大小压缩图片 ,保存在同一路径ImageByMultiple(String sourceFile, int multiple)
质量压缩比,保存在不同一路径ImageByQuality(String sourceFile, int quality, String outputFile)
按质量压缩比压缩图片,保存在同一路径ImageByQuality(String sourceFile, int quality)
    public partial class WebForm2 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){GetFileInfo(@"D:\tupian");//string pathPerc = @"D:\Koala.jpg";//string source = @"D:\Koala.jpg";////if (!File.Exists(pathPerc))////{////    File.Create(pathPerc).Close();////}////else////{////    File.Delete(pathPerc);////    File.Create(pathPerc).Close();////}//getThumImage(source, 18, 3, pathPerc);  }private void GetFileInfo(string filePath){DirectoryInfo directoryInfo = new DirectoryInfo(filePath);try{foreach (DirectoryInfo childDirectoryInfo in directoryInfo.GetDirectories()){string name = childDirectoryInfo.Name.ToString();GetFileInfo(filePath + "\\" + childDirectoryInfo.Name.ToString());}foreach (FileInfo fileInfo in directoryInfo.GetFiles()){//Length单位为bytes,    1k=1024bif (fileInfo.Length > 400 * 1024){//  getThumImage(fileInfo.FullName, 100, 1, fileInfo.FullName);//   ImageByQuality(fileInfo.FullName, 18);// ImageByMultiple(fileInfo.FullName,1);FixSize(fileInfo.FullName, 200, 100, fileInfo.FullName);}}}catch{}}#region 调用图片处理的方法/// <summary>  /// 按质量比和尺寸收缩呗数,生成缩略图,保存为另外路劲/// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <param name="multiple">收缩倍数</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool getThumImage(String sourceFile, long quality, int multiple, String outputFile){bool flag = false;try{flag = ThumImage(sourceFile, quality, multiple, outputFile);}catch{flag = false;}return flag;}/**//// <summary>  /// 按质量比和尺寸收缩呗数,生成缩略图;保存在同一路径/// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <param name="multiple">收缩倍数</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool getThumImage(String sourceFile, long quality, int multiple){bool flag = false;try{flag = ThumImage(sourceFile, quality, multiple, sourceFile);}catch{flag = false;}return flag;}/// <summary>  /// 按图片尺寸大小压缩图片  ,保存在不同路径/// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="multiple">收缩倍数</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool ImageByMultiple(String sourceFile, int multiple, String outputFile){bool flag = false;try{flag = ThumImageByMultiple(sourceFile, multiple, outputFile);}catch{flag = false;}return flag;}/// <summary>  ///  按图片尺寸大小压缩图片  ,保存在同一路径/// </summary>  /// <param name="multiple">收缩倍数</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool ImageByMultiple(String sourceFile, int multiple){bool flag = false;try{flag = ThumImageByMultiple(sourceFile, multiple, sourceFile);}catch{flag = false;}return flag;}/// <summary>  /// 质量压缩比,保存在不同一路径/// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool ImageByQuality(String sourceFile, int quality, String outputFile){bool flag = false;try{flag = ThumImageByQuality(sourceFile, quality, outputFile);}catch{flag = false;}return flag;}/// <summary>  /// 按质量压缩比压缩图片,保存在同一路径/// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool ImageByQuality(String sourceFile, int quality){bool flag = false;try{flag = ThumImageByQuality(sourceFile, quality, sourceFile);}catch{flag = false;}return flag;}#endregion#region 调用图片处理具体方法/// <summary>/// 按照图片质量生成图片,/// </summary>/// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  private static bool ThumImageByQuality(String sourceFile, long quality, String outputFile){bool flag = false;try{long imageQuality = quality;Bitmap sourceImage = new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncoderParameters = new EncoderParameters(1);EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, imageQuality);myEncoderParameters.Param[0] = myEncoderParameter;float xWidth = sourceImage.Width;float yWidth = sourceImage.Height;Bitmap newImage = new Bitmap((int)(xWidth), (int)(yWidth));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage, 0, 0, xWidth, yWidth);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);flag = true;}catch{flag = false;}return flag;}/// <summary>/// 生成缩略图/// </summary>/// <param name="sourceFile">原始图片文件</param>  /// <param name="quality">质量压缩比</param>  /// <param name="multiple">收缩倍数</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  private static bool ThumImage(String sourceFile, long quality, int multiple, String outputFile){bool flag = false;try{long imageQuality = quality;Bitmap sourceImage = new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;EncoderParameters myEncoderParameters = new EncoderParameters(1);EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, imageQuality);myEncoderParameters.Param[0] = myEncoderParameter;float xWidth = sourceImage.Width;float yWidth = sourceImage.Height;Bitmap newImage = new Bitmap((int)(xWidth / multiple), (int)(yWidth / multiple));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile, myImageCodecInfo, myEncoderParameters);flag = true;}catch{flag = false;}return flag;}/// <summary>  /// 按图片尺寸大小压缩图片  /// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="multiple">收缩倍数</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool ThumImageByMultiple(String sourceFile, int multiple, String outputFile){try{Bitmap sourceImage = new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");float xWidth = sourceImage.Width;float yWidth = sourceImage.Height;Bitmap newImage = new Bitmap((int)(xWidth / multiple), (int)(yWidth / multiple));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage, 0, 0, xWidth / multiple, yWidth / multiple);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile);return true;}catch{return false;}}/// <summary>  /// 按图片尺寸大小压缩图片  /// </summary>  /// <param name="sourceFile">原始图片文件</param>  /// <param name="multiple">收缩倍数</param>  /// <param name="outputFile">输出文件名</param>  /// <returns>成功返回true,失败则返回false</returns>  public static bool FixSize(String sourceFile, int xWidth, int yWidth, String outputFile){try{Bitmap sourceImage = new Bitmap(sourceFile);ImageCodecInfo myImageCodecInfo = GetEncoderInfo("image/jpeg");Bitmap newImage = new Bitmap((int)(xWidth), (int)(yWidth));Graphics g = Graphics.FromImage(newImage);g.DrawImage(sourceImage, 0, 0, xWidth, yWidth);sourceImage.Dispose();g.Dispose();newImage.Save(outputFile);return true;}catch{return false;}}#endregion getThumImage/// <summary>  /// 获取图片编码信息  /// </summary>  private static ImageCodecInfo GetEncoderInfo(String mimeType){int j;ImageCodecInfo[] encoders;encoders = ImageCodecInfo.GetImageEncoders();for (j = 0; j < encoders.Length; ++j){if (encoders[j].MimeType == mimeType)return encoders[j];}return null;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/353194.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

线性代数——基变换和图像压缩

信息量过大的情况下使用压缩&#xff0c;如果不压缩系统超载&#xff0c;导致无法发送图片或视频&#xff0c;所以进行压缩处理 &#xff08;这里的图像压缩指的是有损压缩&#xff09; 下图是一个像素为 512 512 512\times512 512512的图像&#xff0c;黑点表示为一个像素 这…

图像压缩小波变换原理

图像编码算法尽可能节省图像的存储空间和减少传输带宽需求&#xff0c;图像编码的目的是在满足一定解码重构质量的条件下利用尽可能少的比特数对图像进行表示。数字图像中的像素都不是独立存在的&#xff0c;小到相邻像素之间&#xff0c;大到图像块与图像块之间&#xff0c;不…

JPEG图像压缩算法的python实现

摘要 文章在研究JPEG压缩编码对图像数据压缩的基本原理的基础上&#xff0c;设计了JPEG图像压缩算法程序实现流程&#xff0c;利用 Python语言对程序进行了编写&#xff0c;并实现了对压缩质量进行控制&#xff0c;验证了JPEG压缩编码对图像数据压缩的可行性。 用 JPEG压缩软件…

图像及图像压缩的研究

一、图片格式、应用场景 1、BMP格式 BMP是英文Bitmap&#xff08;位图&#xff09;的简写&#xff0c;它是Windows操作系统中的标准图像文件格式&#xff0c;能够被多种Windows应用程序所支持。随着Windows操作系统的流行与丰富的Windows应用程序的开发&#xff0c;BMP位图格…

unity图像压缩算法原理

概述 在计算机图形学中&#xff0c;存在许多纹理压缩方案。压缩既减少了纹理内存占用&#xff0c;又降低了使用纹理的带宽要求。本文中&#xff0c;“纹理压缩”与“图像压缩”不同&#xff0c;因为纹理压缩方案的设计允许作为纹理采样的一部分进行有效的随机访问。“图像压缩…

【图像压缩】有损压缩实现无损预测

updating... 1 绪论 一篇很好的结合对比学习与特征压缩的工作。 本文贡献&#xff1a; 1.公式化面向下游预测任务压缩的概念 2.描述了在增强不变性任务上高表现所需要的比特数。 3.提出无监督目标函数训练压缩器近似最优码率。 4.结合zero-shot方法CLIP&#xff0c;在Ima…

基于PCA的图像压缩实现

基于PCA的图像压缩实现 注&#xff1a;该内容为校内课程实验&#xff0c;仅供参考&#xff0c;请勿抄袭&#xff01; 源码&#xff1a;PPCA-for-Image-Compession 摘要   随着计算机互联网的发展和数据的日益增长&#xff0c;如何高效的处理和传输海量数据成为大数据处理的…

基于深度学习的图像压缩

近年来&#xff0c;深度学习在计算机视觉领域已经占据主导地位&#xff0c;不论是在图像识别还是超分辨重现上&#xff0c;深度学习已成为图片研究的重要技术&#xff0c;但它们的能力并不仅限于这些任务&#xff1b;现在深度学习技术已进入图片压缩领域。下面就说说神经网络在…

图像压缩算法

这里说​十种常用的图像压缩算法 数据压缩是保留相同或绝大部分数据前提下减小文件大小的过程。它的原理是消除不必要的数据或以更高效的格式重新组织数据。在进行数据压缩时&#xff0c;你可以选择使用有损方法或无损方法。有损方法会永久性地擦除掉一些数据&#xff0c;而无…

C#图像压缩相关方法总结

前往我的主页以获得更好的阅读体验C#图像压缩相关方法总结 - DearXuan的主页https://blog.dearxuan.com/2022/02/07/C-%E5%9B%BE%E5%83%8F%E5%8E%8B%E7%BC%A9%E7%9B%B8%E5%85%B3%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/ 前言 本文所描述的所有内容和算法&#xff0c;均未使用任…

Matlab实现图像压缩

文章和代码以及样例图片等相关资源&#xff0c;已经归档至【Github仓库&#xff1a;digital-image-processing-matlab】或者公众号【AIShareLab】回复 数字图像处理 也可获取。 文章目录 目的原理图像压缩原理离散余弦变换(DCT)图像压缩原理行程编码&#xff08;RLE&#xff09…

图像压缩相关内容简介

历史 图像压缩的研究起源于20世纪40年代。1948年香农的经典论文《通信的数学原理》中首次提到信息率深圳函数的概念&#xff0c;1959年他又建立了率失真理论&#xff0c;从而奠定了信源编码的理论基础。随后伯杰等人有对其进行了深入的研究&#xff0c;并取得了一定的进步&…

移动端做安全测试的重要性

安全性测试的目的是发现危害手机中数据的安全和完整性的错误和缺陷。发现安全错误通常是比较困难的,软件通常功能运行正常但却不安全。 一、软件权限 APP软件权限包括:网络通信、信息发送、自动启动、 媒体录制、读取用户信息、写入用户数据等权限,因关系到用户个人信息和隐私…

cad 打开硬件加速卡_CAD如何根据已知条件设计图形

1、打开CAD&#xff0c;在左下角把极轴追踪打开(鼠标右键点击&#xff0c;选择90度打√)、把对象捕捉打开(鼠标右键点击&#xff0c;选择中点)。 2、然后在操作界面画线&#xff0c;如图我们已知直角边885和750&#xff0c;方法是按长8852、高750来绘制三点定圆弧。先画8852177…

C#ObjectArx Cad将图形范围缩放至指定实体

先上代码&#xff08;亲测可用&#xff09;&#xff1a; /// <summary>/// 定位缩放值指定实体/// </summary>/// <param name"oid"></param>public static void Orientate(ObjectId oid){try{Entity current_entity GetEntity(oid);curren…

CAD图层设置

一、图层介绍 我们可以把图层想象为一张没有厚度的透明纸&#xff0c;各层之间完全对齐&#xff0c;一层上的某一基准点准确地对准其他各层上的同一基准点。用户可以给每一图层指定所用的线型、颜色&#xff0c;并将具有相同线型和颜色的对象放在统一图层&#xff0c;这些图层…

cad打印本计算机未配置,CAD打印的基本设置详细教程

CAD打印的基本设置详细教程 开始画图之前我们就考虑到打印的需要&#xff0c;要用多大纸张&#xff0c;打印比例应该设置成多少&#xff0c;打印后的字高、线宽、颜色应该设置成多少&#xff0c;在绘制图形的时候&#xff0c;这些为打印而做的准备工作必须做好。要想正确地打印…

CAD打印图形、输出图形

打印图形 指定打印范围、打印比例、图纸大小、打印样式、页边距等参数&#xff0c;打印图纸。 1.单击常用工具栏的“打印图形”按钮。 2.在命令行中输入Plot&#xff0c;按回车键。 打印界面如下 &#xff1a; 界面信息 &#xff08;1&#xff09;选择打印机&#xff1a;默…

CAD梦想画图中如何设置图层

图层介绍 我们可以把CAD对象想象成一张没有厚度的透明纸&#xff0c;各层之间完全对齐&#xff0c;一层上的某一基准点准确的对准其它各层上的同一基准点。用户可以给每一图层指定所用的线型、颜色与线宽&#xff0c;并将其相同线型和颜色的对象放在同一图层&#xff0c;这些图…

AUTOCAD——图形单位与图形边界

图形单位 控制长度与角度的显示精度与格式。 1.执行方式 命令行&#xff1a;DDUNITS 菜单栏&#xff1a;格式→单位 “图形单位操作命令位置”界面 执行以上命令后&#xff0c;系统会弹出如下图所示的“图形单位”对话框。 2.选项说明 &#xff08;1&#xff09;长度与角…