簡體   English   中英

C#簡單圖像調整大小:文件大小不縮小

[英]C# Simple Image Resize : File Size Not Shrinking

我對以下代碼有疑問。 我下面的代碼成功運行了一個目錄,並將圖片的resoultion設置為更小的尺寸。 但是,文件大小不會更改。 例如,尺寸為2400x1800且文件大小為1.5MB的圖像將縮放為800x600,但800x600圖片仍為1.5MB文件大小。 我想我可能要明確壓縮圖片,但我不確定。 有任何想法嗎?

private void Form1_Load(object sender, EventArgs e)
        {
            string[] files = null;
            int count = 0;
            files = System.IO.Directory.GetFiles(@"C:\Users\..\..\ChristmasPicsResized");
            foreach (string file in files)
            {
                System.Drawing.Bitmap bmp = System.Drawing.Bipmap.FromFile(file);

                ResizeBitmap(bmp, 807, 605).Save(
                     @"C:\users\..\..\TempPicHold\Pic" + count.ToString() + ".jpg");
                count++;
            }
        }
        public Bitmap ResizeBitmap(Bitmap b, int nWidth, int nHeight)
        {
            Bitmap result = new Bitmap(nWidth, nHeight);
            using (Graphics g = Graphics.FromImage((Image)result))
                g.DrawImage(b, 0, 0, nWidth, nHeight);
            return result;
        }

發現了問題。 感謝@yetapb顯示更清晰的代碼版本,但仍然無效。 問題的答案是我需要明確指定將圖像保存為的文件類型。 我的猜測是,因為我沒有明確指定圖像格式,所以沒有相應地處理圖像壓縮。一個Bitmap剛剛以較小的分辨率保存,並在其上打了一個“.jpg”,並且沒有相應地進行壓縮。 以下代碼現在有效。

            files = System.IO.Directory.GetFiles(@"C:\PicFolder");
            for (string file in files)
            {
            Bitmap tempBmp = new Bitmap(file);
            Bitmap bmp = new Bitmap(tempBmp, 807, 605);

            bmp.Save(
            @"C:\NewPicFolder\Pic" + count + ".jpg",
            System.Drawing.Imaging.ImageFormat.Jpeg);
            count++;
            }

不確定位圖,但對於其他圖像,您可以指定不同的壓縮編碼器。 這里有 MSDN詳細信息

您需要在Graphics對象上設置一些屬性以更改圖像的質量。

graphics.CompositingQuality = CompositingQuality.HighSpeed; 
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.DrawImage(photo, 0, 0, width, height);

您還可以在保存文件時設置不同的壓縮編碼,或以不同的格式保存。

 private void button4_Click(object sender, EventArgs e)
  {
            String[] files;
            int count = 0;
            files = System.IO.Directory.GetFiles(@"C:/dataset");
            foreach (string file in files)
            {
            Bitmap tempBmp = new Bitmap(file);
            Bitmap bmp = new Bitmap(tempBmp, 200, 200);

            bmp.Save(
            @"C:/Newdataset1/" + count + ".jpg",
            System.Drawing.Imaging.ImageFormat.Jpeg);
            count++;
            }  

}

有趣的實現細節:將圖像翻轉兩次,這將導致縮略圖被拋出,這將減小文件大小。

result.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone); result.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);

進行了一些更改,以下代碼按預期減少了文件大小(對我而言)。

private void Form1_Load(object sender, EventArgs e)
{
    string[] files = null;
    int count = 0;
    files = System.IO.Directory.GetFiles(@"C:\Users\..\..\ChristmasPicsResized");
    foreach (string file in files)
    {
        Bitmap bmp = new Bitmap( file );
        new Bitmap( bmp, 807, 605 ).Save(
                   @"C:\users\..\..\TempPicHold\Pic" + count.ToString() + ".jpg");
        count++;   
    }
}

}

暫無
暫無

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

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