【问题标题】:Image size got bigger when trying to reduce its size尝试减小图像尺寸时图像尺寸变大
【发布时间】:2012-09-01 13:13:09
【问题描述】:

我正在尝试调整 jpg 格式的图片大小,降低它的分辨率,以便在我将其下载到站点 HTML 时使其更小。使用链接中的教程: image resizing tutorial

我设法调整了分辨率,包括在需要时进行裁剪。我的问题是图像的实际尺寸变大了,而不是像我预期的那样变小了。

有什么想法吗?

【问题讨论】:

  • “实际大小”是指字节还是像素?
  • 过去我用过这个:hanselman.com/blog/…
  • @Jon Skeet 实际大小是指字节数。

标签: c# image-resizing


【解决方案1】:

如果缩小尺寸时 JPEG 图像文件变大,那是因为您使用比原始图像更高的质量设置保存它。

【讨论】:

  • 我尝试过使用 InterpolationMode 属性,但不管文件越来越大。值得一提的是,我尝试调整大小的 jpg 文件为 5kb(生成 27kb 文件),这可能意味着它之前已经被压缩过。
  • @mashtagidi:您应该使用InterpolationMode.HighQualityBicubic 来获得压缩效果最好的图像。使用NearestNeighbor 将使大多数图像更难压缩。如果原始图像只有 5 kb,并且足够大,您想将其缩小,那么它可能以非常低的质量设置保存。保存文件时降低质量设置,直到获得所需的文件大小,然后查看图像质量是否可以接受。
  • 谢谢。 “保存文件时降低质量设置”。我该如何控制它?我在 Image 类中使用内置的 save() 函数。
  • @mashtagidi:内置方法使用最高质量设置 (100),除非您使用不同的设置指定编码器参数。使用您链接到的教程中的 saveJpeg 方法。
【解决方案2】:

当您使用像 jpeg 这样的压缩图像格式时,这是很正常的。它是由您在缩小图像尺寸时选择的过滤器引起的。例如,Graphics 类的默认选择是 InterpolationMode.Bilinear。这在制作一个好看的缩小版图像方面做得非常好。但是由于过滤算法,代价是为图像添加了许多额外的颜色。生成的图像不会像原始图像那样压缩,实际上可能需要更多存储空间。

您必须选择质量较低的过滤器来避免这种情况,例如 InterpolationMode.NearestNeighbor。是的,看起来不会那么好。一般来说,您应该避免重新压缩已经以 jpeg 等有损格式压缩的图像。

【讨论】:

  • 当您说我应该避免重新压缩已经压缩的图像时,您认为我要压缩的图像已经被压缩了吗?或者这是一个一般性的陈述?
  • 这是最合乎逻辑的结论。不知道您为什么不告诉我们您使用的是哪种图像格式,没有理由保密。
  • JPEG 不使用索引颜色,因此使用 InterpolationMode.NearestNeighbor 阻止它创建新颜色不会使其压缩得更好,而是相反。
  • @Hans Passant 当然这不是秘密 :)。通常我试图重新调整大小的图像是 jpg 或 jpeg 格式。
  • 嗯,它是一个 jpeg,示例代码使用 InterpolationMode.HighQualityBicubic,所以我的答案中的所有内容都适合。修改 InterpolationMode 属性以查看对结果图像的影响。
猜你喜欢
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 2015-01-27
  • 2011-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多