循环压缩文件夹下的文件

来源:互联网 发布:汉王软件 编辑:程序博客网 时间:2024/06/05 02:00

今天做项目,由于图片太大,很占内存。于是决定压缩文件。
整理了一下代码,方便以后使用。
循环压缩文件:

foreach (var file in Directory.GetFiles(Photos)){  int qCount=50;                      Bitmap oImage = new Bitmap(file);//从图片文件中读取图片流  Bitmap OldImage = new Bitmap(oImage);//将图片流复制到新的图片流中  oImage.Dispose();//将原来的图片流释放,将图片文件进行解锁。  ReduceImage(OldImage, file, qCount);  FileStream fs = new FileStream(file, FileMode.Open);  byte[] IMGDATA = new byte[fs.Length];  BinaryReader br = new BinaryReader(fs);  IMGDATA = br.ReadBytes(Convert.ToInt32(fs.Length));  //Image IDImg = Image.FromFile(file);  //MemoryStream ms = new MemoryStream();  //IDImg.Save(ms, Imaging.ImageFormat.Bmp);  //byte[] IMGDATA = ms.ToArray(); }

压缩的方法:

        /// <summary>        /// 压缩图片        /// </summary>        /// <param name="iSource">图片文件</param>        /// <param name="outPath">路径</param>                 /// <param name="flag">值越大代表图片质量越好,一般默认控制在50为最佳压缩质量</param>        /// <returns></returns>        public static bool ReduceImage(Image iSource, string outPath, int flag)        {            ImageFormat tFormat = iSource.RawFormat;            EncoderParameters ep = new EncoderParameters();            long[] qy = new long[1];            qy[0] = flag;            EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);            ep.Param[0] = eParam;            try            {                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageDecoders();                ImageCodecInfo jpegICIinfo = null;                for (int x = 0; x < arrayICI.Length; x++)                {                    if (arrayICI[x].FormatDescription.Equals("JPEG")) //只有JPEG是压缩的,别的好像都是放大的                    {                        jpegICIinfo = arrayICI[x];                        break;                    }                }                if (jpegICIinfo != null)                    iSource.Save(outPath, jpegICIinfo, ep);                else                    iSource.Save(outPath, tFormat);                return true;            }            catch            {                return false;            }            finally            {                iSource.Dispose();            }        }
原创粉丝点击