C#压缩图片
using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Web; namespace Siia.CarParts.UI.Common { public class ImageHelper { public static bool GetPicThumbnail(string sFile, string outPath, int flag) { string domainPath = HttpRuntime.AppDomainAppPath.ToString(); string fileName = sFile.Split('/').Last(); string filePath = Path.GetFullPath(domainPath + sFile); string zipPath = Path.GetFullPath(domainPath + outPath + "\\zip"); byte[] bs = File.ReadAllBytes(filePath); double size = (bs.Length / 1024); if (size < 1024) return true; System.Drawing.Image iSource = System.Drawing.Image.FromFile(filePath); ImageFormat tFormat = iSource.RawFormat; //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) { if (!Directory.Exists(zipPath)) { Directory.CreateDirectory(zipPath); } iSource.Save(zipPath+"\\"+fileName, jpegICIinfo, ep);//outPath是压缩后的新路径 } //else //{ // iSource.Save(outPath, tFormat); //} return true; } catch { return false; } finally { iSource.Dispose(); iSource.Dispose(); string sourceFile = zipPath + "\\" + fileName; //覆盖源文件 if (System.IO.File.Exists(sourceFile)) { System.IO.File.Copy(sourceFile, filePath, true); } } } /// <summary> /// 图像缩略图处理 /// </summary> /// <param name="bytes">图像源数据</param> /// <param name="compression">压缩质量 1-100</param> /// <param name="thumbWidth">缩略图的宽</param> /// <param name="thumbHeight">缩略图的高</param> /// <returns></returns> public static byte[] ConvertToThumbnail(byte[] bytes, int compression = 100, int thumbWidth = 0, int thumbHeight = 0) { byte[] bs = null; try { if (bytes != null) { using (MemoryStream ms = new MemoryStream(bytes)) { using (Bitmap srcimg = new Bitmap(ms)) { if (thumbWidth == 0 && thumbHeight == 0) { thumbWidth = srcimg.Width; thumbHeight = srcimg.Height; } using (Bitmap dstimg = new Bitmap(thumbWidth, thumbHeight))//图片压缩质量 { //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。 using (Graphics gr = Graphics.FromImage(dstimg)) { //把原始图像绘制成上面所设置宽高的缩小图 Rectangle rectDestination = new Rectangle(0, 0, thumbWidth, thumbHeight); gr.Clear(Color.WhiteSmoke); gr.CompositingQuality = CompositingQuality.HighQuality; gr.SmoothingMode = SmoothingMode.HighQuality; gr.InterpolationMode = InterpolationMode.HighQualityBicubic; gr.DrawImage(srcimg, rectDestination, 0, 0, srcimg.Width, srcimg.Height, GraphicsUnit.Pixel); EncoderParameters ep = new EncoderParameters(1); ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, compression);//设置压缩的比例1-100 ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = arrayICI.FirstOrDefault(t => t.FormatID == System.Drawing.Imaging.ImageFormat.Png.Guid); using (MemoryStream dstms = new MemoryStream()) { if (jpegICIinfo != null) { dstimg.Save(dstms, jpegICIinfo, ep); } else { dstimg.Save(dstms, System.Drawing.Imaging.ImageFormat.Png);//保存到内存里 } bs = new Byte[dstms.Length]; dstms.Position = 0; dstms.Read(bs, 0, bs.Length); } } } } } } } catch (Exception ex) { //LogManager.DefaultLogger.Error(LogConvert.ParseWebEx(ex), string.Concat("ConvertToThumbnail error.", thumbWidth, " ", thumbHeight)); } return bs; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)