怎么才能把图片变小,System.Drawing.Imaging.Encoder.Quality 说是1-100, 但我修改成那个都一样都是120kImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();
            ImageCodecInfo ici = null;
            foreach (ImageCodecInfo i in icis)
            {
                if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")
                {
                    ici = i;
                }
            }
            EncoderParameters encoderParams = new EncoderParameters();  
            long[] quality = new long[1];
            quality[0] = 80; //压缩比例,
            EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
            //EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, ((long)80));
            encoderParams.Param[0] = encoderParam;
            bitmap.Save(thumbnailPath, ici, encoderParams);
            encoderParams.Dispose();

解决方案 »

  1.   


    public static byte[] ResizeImageFile(byte[] imageFile, int targetSizeW, int targetSizeH){   System.Drawing.Image original = System.Drawing.Image.FromStream(new MemoryStream(imageFile));   int targetH, targetW;   targetW = targetSizeW;   targetH = (int)(original.Height * ((float)targetSizeW / (float)original.Width));   if (targetH > targetSizeH)   {      targetH = targetSizeH;      targetW = (int)(original.Width * ((float)targetSizeH / (float)original.Height));   }   if (targetSizeW < (int)original.Width || targetSizeH < (int)original.Height)   {      System.Drawing.Image imgPhoto = System.Drawing.Image.FromStream(new MemoryStream(imageFile));      // Create a new blank canvas.  The resized image will be drawn on this canvas.      Bitmap bmPhoto = new Bitmap(targetW, targetH, PixelFormat.Format24bppRgb);      bmPhoto.SetResolution(72, 72);      Graphics grPhoto = Graphics.FromImage(bmPhoto);      grPhoto.SmoothingMode = SmoothingMode.AntiAlias;      grPhoto.InterpolationMode = InterpolationMode.HighQualityBicubic;      grPhoto.PixelOffsetMode = PixelOffsetMode.HighQuality;      grPhoto.DrawImage(imgPhoto, new Rectangle(0, 0, targetW, targetH), 0, 0, original.Width, original.Height, GraphicsUnit.Pixel);      // Save out to memory and then to a file.  We dispose of all objects to make sure the files don't stay locked.      MemoryStream mm = new MemoryStream();      bmPhoto.Save(mm, System.Drawing.Imaging.ImageFormat.Jpeg);      original.Dispose();      imgPhoto.Dispose();      bmPhoto.Dispose();      grPhoto.Dispose();      return mm.GetBuffer();   }   else   {      return imageFile;   }}
      

  2.   

    bmPhoto.Save(mm, System.Drawing.Imaging.ImageFormat.Jpeg);
     这个出来的清晰度很低,原32k  出来时7k左右,清晰度太差~
      

  3.   

    求高手,急用,我怎么修改quality  1--100 我都试过了,出来的都是超大容量(120k),没反应