.net压缩图片质量(附demo)

       private void CompressedImage(string fileName, long quality)
        {
            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            Byte[] bytePic = new Byte[fs.Length];
            fs.Read(bytePic, 0, bytePic.Length);
            MemoryStream stream = new MemoryStream(bytePic);
            Bitmap bmp = (Bitmap)Image.FromStream(stream);
            ImageCodecInfo myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[1];  //如果下面遍历没有这种图片格式,就默认为jpeg
            ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
            for (int j = 0; j < encoders.Length; j++)
            {
                if (encoders[j].MimeType == "image/jpeg")
                {
                    myImageCodecInfo = encoders[j];
                    break;
                }
            }
            System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;  //要操作的是质量
            EncoderParameters myEncoderParameters = new EncoderParameters(1);      //一个成员,只处理质量
            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, quality);    //0为最差质量,100为最好,注意是long类型
            myEncoderParameters.Param[0] = myEncoderParameter;
            Size s = new Size(bmp.Width, bmp.Height);
            Bitmap newBmp = new Bitmap(bmp, s);
            MemoryStream ms = new MemoryStream();
            newBmp.Save(ms, myImageCodecInfo, myEncoderParameters);    //压缩后的流保存到ms
            //从流中还原图片
            Image image = Image.FromStream(ms);
            string curDirectory = Path.GetDirectoryName(Assembly.GetCallingAssembly().GetModules()[0].FullyQualifiedName) + "\\";
            //保存图片
            image.Save(curDirectory + "pic.jpg");
            fs.Dispose();
            stream.Dispose();
            newBmp.Dispose();
            ms.Dispose();
        }

 demo

posted @ 2016-02-01 16:01  时噬者  阅读(1084)  评论(0编辑  收藏  举报