| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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 按比例压缩
- /// <summary>
- /// 将byte转换为图像
- /// </summary>
- /// <param name="Bytes"></param>
- /// <returns></returns>
- 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;
- }
- }
- /// <summary>
- /// 图像保存转化为数组
- /// </summary>
- /// <param name="strFileName">传入图像文件名称</param>
- /// <returns></returns>
- 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];
- }
- }
- /// <summary>
- /// 获取图片文件的编码与解码
- /// </summary>
- /// <param name="MYmimeType"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 图片压缩
- /// </summary>
- /// <param name="imagePath">图片文件路径</param>
- /// <param name="targetFolder">保存位置</param>
- /// <param name="quality">压缩质量</param>
- /// <param name="fileSuffix">压缩后的文件名后缀(防止直接覆盖原文件)</param>
- 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
- }
- }
|