| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- 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;
- namespace Core.StlMes.Client.LgResMgt.Mcms
- {
- /// <summary>
- /// 图片处理类
- /// 1、生成缩略图片或按照比例改变图片的大小和画质
- /// 2、将生成的缩略图放到指定的目录下
- /// </summary>
- public class ImageZip
- {
- public Image ResourceImage, ReducedImage;
- private int ImageWidth;
- private int ImageHeight;
- public string ErrMessage;
- /// <summary>
- /// 类的构造函数
- /// </summary>
- /// <param name="ImageFileName">图片文件的全路径名称</param>
- public ImageZip()
- {
- //ResourceImage = Image.FromFile(ImageFileName);
- ErrMessage = "";
- }
- /// <summary>
- /// 类的构造函数
- /// </summary>
- /// <param name="ImageFileName">图片文件的全路径名称</param>
- public ImageZip(string ImageFileName)
- {
- ResourceImage = Image.FromFile(ImageFileName);
- ErrMessage = "";
- }
- public bool ThumbnailCallback()
- {
- return false;
- }
- /// <summary>
- /// 生成缩略图,返回缩略图的Image对象
- /// </summary>
- /// <param name="Width">缩略图的宽度</param>
- /// <param name="Height">缩略图的高度</param>
- /// <returns>缩略图的Image对象</returns>
- public Image GetReducedImage(int Width, int Height)
- {
- double LengthLong; //存储(长和宽中)较短的长度
- int widthOK, heightOK; //存储实际要生成的图片的长宽
- if (Width < Height) //判断输入的长和宽那个较短
- {
- LengthLong = Width; //把较短的存储在 LengthLonh 用于计算
- }
- else
- {
- LengthLong = Height;
- }
- try
- {
- //判断原图片 长和宽
- //原图比较长的一个边要和缩略图的边相等
- if (ResourceImage.Width > ResourceImage.Height)
- {
- widthOK = (int)LengthLong;
- heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);
- }
- else
- {
- heightOK = (int)LengthLong;
- widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;
- }
- Image ReducedImage;
- Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
- ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);
- return ReducedImage;
- }
- catch (Exception e)
- {
- ErrMessage = e.Message;
- return null;
- }
- }
- /// <summary>
- /// 生成缩略图,将缩略图文件保存到指定的路径
- /// </summary>
- /// <param name="Width">缩略图的宽度</param>
- /// <param name="Height">缩略图的高度</param>
- /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
- /// <returns>成功返回true,否则返回false</returns>
- public bool GetReducedImage(int Width, int Height, string targetFilePath)
- {
- double LengthLong; //存储(长和宽中)较短的长度
- int widthOK, heightOK; //存储实际要生成的图片的长宽
- if (Width < Height) //判断输入的长和宽那个较短
- {
- LengthLong = Width; //把较短的存储在 LengthLonh 用于计算
- }
- else
- {
- LengthLong = Height;
- }
- try
- {
- //判断原图片 长和宽
- //原图比较长的一个边要和缩略图的边相等
- if (ResourceImage.Width > ResourceImage.Height)
- {
- widthOK = (int)LengthLong;
- heightOK = (int)(LengthLong / ResourceImage.Width * ResourceImage.Height);
- }
- else
- {
- heightOK = (int)LengthLong;
- widthOK = (int)LengthLong / ResourceImage.Height * ResourceImage.Width;
- }
- Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
- ReducedImage = ResourceImage.GetThumbnailImage(widthOK, heightOK, callb, IntPtr.Zero);
- ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg);
- ReducedImage.Dispose();
- return true;
- }
- catch (Exception e)
- {
- ErrMessage = e.Message; //e.ToString();
- return false;
- }
- }
- /// <summary>
- /// 生成缩略图,返回缩略图的Image对象
- /// </summary>
- /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>
- /// <returns>缩略图的Image对象</returns>
- public Image GetReducedImage(double Percent)
- {
- try
- {
- Image ReducedImage;
- Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
- ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
- ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);
- ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
- return ReducedImage;
- }
- catch (Exception e)
- {
- ErrMessage = e.Message;
- return null;
- }
- }
- /// <summary>
- /// 生成缩略图,返回缩略图的Image对象
- /// </summary>
- /// <param name="Percent">缩略图的宽度百分比 如:需要百分之80,就填0.8</param>
- /// <param name="targetFilePath">缩略图保存的全文件名,(带路径),参数格式:D:\Images\filename.jpg</param>
- /// <returns>成功返回true,否则返回false</returns>
- public bool GetReducedImage(double Percent, string targetFilePath)
- {
- try
- {
- Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(ThumbnailCallback);
- ImageWidth = Convert.ToInt32(ResourceImage.Width * Percent);
- ImageHeight = Convert.ToInt32(ResourceImage.Width * Percent);
- ReducedImage = ResourceImage.GetThumbnailImage(ImageWidth, ImageHeight, callb, IntPtr.Zero);
- ReducedImage.Save(@targetFilePath, ImageFormat.Jpeg);
- //ReducedImage.Dispose();
- return true;
- }
- catch (Exception e)
- {
- ErrMessage = e.Message;
- return false;
- }
- }
- /// <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 = 40L;
- long Len = Dest_Size;
- /*
- do
- {
- if (dLevel > 15)
- {
- dLevel -= 5;
- }
- else
- {
- dLevel -= 1;
- }
- __encoderParameter = new EncoderParameter(__encoder, dLevel); //图片质量
- __encoderParameters.Param[0] = __encoderParameter;
- __format = ImageFormat.Jpeg;
- bmpStream = new MemoryStream();
- img.Save(bmpStream, __imageCodecInfo, __encoderParameters);
- Len = bmpStream.ToArray().Length;
- if (Len <= Dest_Size) break;
- } while (dLevel > 0);
- //*/
- __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="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;
- }
- }
- }
- }
|