簡體   English   中英

裁剪圖像並調整大小會產生更大的尺寸嗎?

[英]Cropping and resizing image genenerate bigger size?

我嘗試使用克隆方法裁剪和調整圖像大小。 它可以工作,但是輸出大小太大。 難道我做錯了什么 ?

var filename = Server.MapPath("1.jpg");   >> 66 kb, width:960px, height:637px
                Bitmap img = new Bitmap(filename);


                Bitmap original = new Bitmap(filename);
                Rectangle cloneRect = new Rectangle(230, 0, 540, img.Height);
                PixelFormat format = img.PixelFormat;
                Bitmap clone = (Bitmap)original.Clone(cloneRect, format);    

                var newImg = resizeImage((Image)clone, new Size(210, 210));    

                newImg.Save(@"f:\2.jpg");  >> output size: 82 kb

 private static Image resizeImage(Image imgToResize, Size size)
    {
        int sourceWidth = imgToResize.Width;
        int sourceHeight = imgToResize.Height;

        float nPercent = 0;
        float nPercentW = 0;
        float nPercentH = 0;

        nPercentW = ((float)size.Width / (float)sourceWidth);
        nPercentH = ((float)size.Height / (float)sourceHeight);

        if (nPercentH < nPercentW)
            nPercent = nPercentH;
        else
            nPercent = nPercentW;

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);

        Bitmap b = new Bitmap(destWidth, destHeight);
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
        g.Dispose();

        return (Image)b;
    }

是的,因為未指定任何壓縮格式,所以使用具有指定參數的Image.Save方法( http://msdn.microsoft.com/zh-cn/library/9t4syfhh(v=vs.110) )將文件保存為jpeg ,它將解決此問題。

使用此功能保存圖像。

    /// <summary>
    /// Saves the image to  specified stream and format.
    /// </summary>
    /// <param name="image">The image to save.</param>
    /// <param name="outputStream">The stream to used.</param>
    /// <param name="format">The format of new image.</param>
    /// <param name="quality">The quality of the image in percent.</param>
    public static void SaveTo(this Image image, Stream outputStream, ImageFormat format, int quality)
    {
        EncoderParameters encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);
        ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
        if (format == ImageFormat.Gif)
        {
            image.Save(outputStream, ImageFormat.Gif);
        }
        else if (format == ImageFormat.Jpeg)
        {
            image.Save(outputStream, encoders[1], encoderParameters);
        }
        else if (format == ImageFormat.Png)
        {
            image.Save(outputStream, encoders[4], encoderParameters);
        }
        else if (format == ImageFormat.Bmp)
        {
            image.Save(outputStream, encoders[0], encoderParameters);
        }
        else
        {
            image.Save(outputStream, format);
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM