2014-05-15 50 views
0

我将图片加载到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

您将Resizeimage制作为与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"); 
+0

他们出来只是黑色的? – Pomster

+0

对不起,我还不够清楚。我的代码将解决您的尺寸问题。所有关于缩放的代码都必须重新编写。查看我的编辑以获取示例解决方案。 – wonko79