如果我试图改变宽度&图像高度增加的图像高度。为了获得缩小尺寸的图像,我该怎么做?

时间:2017-12-06 12:16:48

标签: c# .net bitmap resize

更改宽度&尺寸缩小的图像高度

Image Resize(Image image, int w, int h)
    {
        Bitmap bmp = new Bitmap(w, h);
        Graphics graphic = Graphics.FromImage(bmp);

        graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        graphic.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        graphic.CompositingQuality = CompositingQuality.HighQuality;
        graphic.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        graphic.DrawImage(image, 0, 0, w, h);

        graphic.Dispose();
        return bmp; 
    } 

即使我减小宽度&图像的高度我的图像大小增加。如何解决这个问题?

我希望转换后的文件尺寸小于原始图像。

1 个答案:

答案 0 :(得分:0)

好吧,如果你想减少图像存储,这可能是你想要的:

// Make sure to include this at the top
using System.Drawing.Imaging;

/// <summary> 
/// Saves an image as a jpeg image, with the given quality 
/// </summary> 
/// <param name="path"> Path to which the image would be saved. </param> 
/// <param name="quality"> An integer from 0 to 100, with 100 being the highest quality. </param> 
public static void SaveJpeg (string path, Image img, int quality) 
{ 
    if (quality<0  ||  quality>100) 
        throw new ArgumentOutOfRangeException("quality must be between 0 and 100."); 

     // Encoder parameter for image quality 
     EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, quality); 
     // JPEG image codec 
     ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg"); 
     EncoderParameters encoderParams = new EncoderParameters(1); 
     encoderParams.Param[0] = qualityParam; 
     img.Save(path, jpegCodec, encoderParams); 
} 

/// <summary> 
/// Returns the image codec with the given mime type 
/// </summary> 
private static ImageCodecInfo GetEncoderInfo(string mimeType) 
{ 
     // Get image codecs for all image formats 
     ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders(); 

     // Find the correct image codec 
     for(int i=0; i<codecs.Length; i++) 
         if(codecs[i].MimeType == mimeType) 
             return codecs[i]; 

     return null; 
 } 

然后你可以这样做:

// First load the image somehow
Image myImage = Image.FromFile(pathToImage, true); 
// Save the image with a quality of 50% 
SaveJpeg (destImagePath, myImage, 50);