using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CarLocalMeter { public class ImageZip { #region 按比例压缩 /// /// 将byte转换为图像 /// /// /// public static Bitmap BytesToBitmap(byte[] Bytes) { if (Bytes.Length == 0 || Bytes.Length == 1) { return null; } try { MemoryStream ImageMem = new MemoryStream(Bytes, true); ImageMem.Write(Bytes, 0, Bytes.Length); Bitmap _Image = new Bitmap(ImageMem); return _Image; } catch (Exception ex) { Debug.Print(ex.Message); return null; } } /// /// 图像保存转化为数组 /// /// 传入图像文件名称 /// public static byte[] ZipImageByte(string strImagePath) { try { long Dest_Size = 55296; Bitmap img = null; if (System.IO.File.Exists(strImagePath)) { img = new Bitmap(strImagePath); } else { return new byte[1]; } MemoryStream bmpStream = new MemoryStream(); img.Save(bmpStream, System.Drawing.Imaging.ImageFormat.Jpeg); if (bmpStream.ToArray().Length < Dest_Size) { img.Dispose(); return bmpStream.ToArray(); } else { ImageFormat __format; System.Drawing.Imaging.Encoder __encoder; EncoderParameter __encoderParameter; EncoderParameters __encoderParameters; ImageCodecInfo __imageCodecInfo; __imageCodecInfo = DoGetEncoderInfo("image/jpeg"); __encoder = System.Drawing.Imaging.Encoder.Quality; __encoderParameters = new EncoderParameters(1); long dLevel = 30L; long Len = Dest_Size; __encoderParameter = new EncoderParameter(__encoder, dLevel); //图片质量 __encoderParameters.Param[0] = __encoderParameter; bmpStream = new MemoryStream(); img.Save(bmpStream, __imageCodecInfo, __encoderParameters); Len = bmpStream.ToArray().Length; img.Dispose(); return bmpStream.ToArray(); } } catch (Exception exp) { Debug.Print(exp.Message); return new byte[1]; } } /// /// 获取图片文件的编码与解码 /// /// /// public static ImageCodecInfo DoGetEncoderInfo(string MYmimeType) { int i = 0; System.Drawing.Imaging.ImageCodecInfo[] encoders = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders(); for (i = 0; i < encoders.Length; i++) { if (encoders[i].MimeType == MYmimeType) { return encoders[i]; } } return null; } /// /// 图片压缩 /// /// 图片文件路径 /// 保存位置 /// 压缩质量 /// 压缩后的文件名后缀(防止直接覆盖原文件) public static void CompressionImage(Image img, string targetFolder, long quality = 100, string fileSuffix = "compress") { var fileFullName = targetFolder; var imageByte = CompressionImage(img, quality); var ms = new MemoryStream(imageByte); var image = Image.FromStream(ms); image.Save(fileFullName); ms.Close(); ms.Dispose(); image.Dispose(); } private static byte[] CompressionImage(Image img, long quality) { using (var bitmap = new Bitmap(img)) { var codecInfo = GetEncoder(img.RawFormat); var myEncoder = System.Drawing.Imaging.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); } #endregion } }