【问题标题】:Image resizing using C#使用 C# 调整图像大小
【发布时间】:2012-06-23 16:15:01
【问题描述】:

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

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

  • 调整大小时图像如何失去清晰度?有没有

  • 是否有任何免费的 .Net(我使用的是 4.0)库可用于执行此操作?如果不能,我可以使用任何使用 com 互操作性的库吗?

非常感谢,

【问题讨论】:

标签: c#-4.0 png jpeg gif tiff


【解决方案1】:

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

  • GDI+
  • WIC
  • WPF

这是一个很好的blog post,涵盖了它们之间的差异。

以下是 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);
        }
    }
}

【讨论】:

  • 谢谢达林。我不想在数字上提及宽度和高度。而是以百分比的形式提及它们。要使用它,我将不得不(可能)计算现有图像的高度宽度。
  • 是的,您可以在加载 srcImage 后执行此操作。在第一个和第二个 using 语句之间。您可以使用 srcImage.Width 和 srcImage.Height 来计算传递给 Bitmap 构造函数的 newWidth 和 newHeight。
  • 这似乎没有压缩图像。具有讽刺意味的是,在将 .tiff 文件的分辨率减半后,它占用了两倍的空间。
【解决方案2】:

我使用了 Darin Dimitrov 提供的示例, 图像膨胀到并占用了大量磁盘空间(从 1.5MB 到 17MB 左右)。

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

下面的函数会将图像保存为位图(大图)。

newImage.Save(outputFile)

正确的函数应该是:

newImage.Save(outputFile, ImageFormat.Jpeg);

【讨论】:

    【解决方案3】:

    Imageresizer 效果很好。 http://imageresizing.net/

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 1970-01-01
      • 2010-09-07
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-02
      • 2011-09-07
      相关资源
      最近更新 更多