减少位图图像的物理尺寸?

时间:2014-05-15 09:59:38

标签: c# image bitmap resize

我正在将图像加载到excel页面上,一旦完成这个excel大约是48,284 KB这很大并影响下载速度,并且对我们想要实现的目标效率不高。

我正在尽可能地减少这个Excel文件的大小,并认为减少图像大小可以解决问题,因为没有图像的excel文件大约是1000 kb。

这是我到目前为止所尝试的没有任何影响:

public Image ReduceImageSize(Image img)
{
     float iwidth = 150;
     float iheight = 150;
     var brush = new SolidBrush(Color.Black);

     var Resizedimage = new Bitmap(img);

     float scale = Math.Min(iwidth / Resizedimage.Width, iheight / Resizedimage.Height);

     var graph = Graphics.FromImage(Resizedimage);

     graph.InterpolationMode = InterpolationMode.Low;
     graph.CompositingQuality = CompositingQuality.Default;
     graph.SmoothingMode = SmoothingMode.None;

     var scaleWidth = (int)(Resizedimage.Width * scale);
     var scaleHeight = (int)(Resizedimage.Height * scale);

     graph.FillRectangle(brush, new RectangleF(0, 0, iwidth, iheight));
     graph.DrawImage(Resizedimage, new Rectangle(((int)iwidth - scaleWidth) / 2, ((int)iheight - scaleHeight) / 2, scaleWidth, scaleHeight));

     return Resizedimage;
}

此时我正在寻找任何减小尺寸的方法,如果它涉及失去一些质量或减少图像尺寸。

请帮忙。

1 个答案:

答案 0 :(得分:2)

你使Resizedimage的大小与img相同。

使用以下代码修复结果图像大小:

var Resizedimage = new Bitmap(iwidth,iheight);

调整保持纵横比的图像大小的示例:

            Image img = Image.FromFile(@"c:\temp\1.jpg");
        Bitmap resizedImg = new Bitmap(150, 150);

        double ratioX = (double)resizedImg.Width / (double)img.Width;
        double ratioY = (double)resizedImg.Height / (double)img.Height;
        double ratio = ratioX < ratioY ? ratioX : ratioY;

        int newHeight = Convert.ToInt32(img.Height * ratio);
        int newWidth = Convert.ToInt32(img.Width * ratio);

        using (Graphics g = Graphics.FromImage(resizedImg))
        {
            g.DrawImage(img, 0, 0, newWidth, newHeight);
        }
        resizedImg.Save(@"c:\temp\2.jpg");