使用C#调整图像大小

Jam*_*mes 7 png jpeg tiff gif c#-4.0

从数码相机中提取的图像通常超过2-3 MB,这使得它很难通过电子邮件和其他方式传输.这需要调整图像大小(根据文件大小而不是高度或宽度).与MS Paint提供图像大小调整功能非常相似.我对图像文件理论没有很好的教育.如果有人能指出我关注以下信息,我将不胜感激:

  • 图像理论(各种图像格式如何工作jpeg,png,tiff等).

  • 调整大小后图像如何失去清晰度?有一些吗?

  • 有没有免费的.Net(我使用的是4.0)库可以这样做吗?如果没有,我可以使用任何使用com interoperabilty的库吗?

非常感谢,

Dar*_*rov 33

图像大小调整功能是内置于.NET框架中的.有几种不同的方法:

  • GDI +
  • WIC
  • WPF

这是一篇很好的博客文章,涵盖了它们之间的差异.

这是GDI +的一个例子:

public void Resize(string imageFile, string outputFile, double scaleFactor)
{
    using (var srcImage = Image.FromFile(imageFile))
    {
        var newWidth = (int)(srcImage.Width * scaleFactor);
        var newHeight = (int)(srcImage.Height * scaleFactor);
        using (var newImage = new Bitmap(newWidth, newHeight))
        using (var graphics = Graphics.FromImage(newImage))
        {
            graphics.SmoothingMode = SmoothingMode.AntiAlias;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
            newImage.Save(outputFile);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Dim*_*rba 8

我使用了Darin Dimitrov提供的示例,Image被充气并占用了大量磁盘空间(从1.5MB到17MB左右).

这是由于最后一行代码中的一个小错误.

下面的功能将图像保存为位图(巨大的图像大小).

newImage.Save(outputFile)
Run Code Online (Sandbox Code Playgroud)

正确的功能应该是:

newImage.Save(outputFile, ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)