我正在将图像加载到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;
}
此时我正在寻找任何减小尺寸的方法,如果它涉及失去一些质量或减少图像尺寸。
请帮忙。
答案 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");