using System; using System.Collections.Generic; using System.Drawing.Imaging; using System.Drawing; using System.IO; using System.Linq; using System.Web; namespace TradeManageNew { public class ImageCompress { /// /// 图片压缩 /// /// 图片文件路径 /// 保存文件夹 /// 压缩质量 /// 压缩后的文件名后缀(防止直接覆盖原文件) public static string CompressionImage(string imagePath, string targetFolder, long quality = 100, string fileSuffix = "compress") { if (!File.Exists(imagePath)) { throw new FileNotFoundException(); } if (!Directory.Exists(targetFolder)) { Directory.CreateDirectory(targetFolder); } var fileInfo = new FileInfo(imagePath); var fileName = fileInfo.Name.Replace(fileInfo.Extension, ""); var fileFullName = Path.Combine($"{targetFolder}", $"{fileName}_{fileSuffix}{fileInfo.Extension}"); var imageByte = CompressionImage(imagePath, quality); var ms = new MemoryStream(imageByte); var image = Image.FromStream(ms); image.Save(fileFullName); ms.Close(); ms.Dispose(); image.Dispose(); return fileFullName; } private static byte[] CompressionImage(string imagePath, long quality) { using (var fileStream = new FileStream(imagePath, FileMode.Open)) { using (var img = Image.FromStream(fileStream)) { using (var bitmap = new Bitmap(img)) { var codecInfo = GetEncoder(img.RawFormat); var myEncoder = Encoder.Quality; var myEncoderParameters = new EncoderParameters(1); var myEncoderParameter = new EncoderParameter(myEncoder, quality); myEncoderParameters.Param[0] = myEncoderParameter; using (var ms = new MemoryStream()) { bitmap.Save(ms, codecInfo, myEncoderParameters); myEncoderParameters.Dispose(); myEncoderParameter.Dispose(); return ms.ToArray(); } } } } } private static ImageCodecInfo GetEncoder(ImageFormat format) { var codecs = ImageCodecInfo.GetImageDecoders(); return codecs.FirstOrDefault(codec => codec.FormatID == format.Guid); } public static byte[] CompressImage(string sourcePath) { using (Bitmap source = new Bitmap(sourcePath)) { int newWidth = source.Width / 5; int newHeight = source.Height / 5; Bitmap compressed = new Bitmap(source, new Size(newWidth, newHeight)); using (MemoryStream memoryStream = new MemoryStream()) { compressed.Save(memoryStream, ImageFormat.Jpeg); return memoryStream.ToArray(); } } } } }