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 RailLocalMeter
{
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
}
}