如何将图片大小调整为特定文件大小?

我想将图片调整为特定的文件大小。 例如,不超过200KB。 使用C#.NET实现这一目标的最佳方法是什么?

谢谢 !

如果您考虑一下,在resize之前,您不会知道图像的文件大小。 因此,您必须执行连续的迭代尝试并在之后比较文件大小,或者您可以更改约束以将图像限制为特定的高度和宽度维度集。

请参阅如何将C#中的图像大小调整为某个硬盘大小

如果这不是一个非常重要的function,那么试错法就足够了。 假设您需要将输入缩小到N * 100% ,可以通过将两个维度缩放sqrt(N) * 100%

如果这重要,您需要更好地理解图像压缩技术。 我会假设JPG。 它是一种图像格式,通过将图像分解为8×8像素块,DFT转换它们,丢弃小系数,然后压缩生成的比特流来实现有损压缩。

接下来你可以用质量水平来衡量一下,你丢掉了多少小系数。 您不需要为此重做(昂贵的)DFT。 因此,如果文件结尾稍微过大,您可以丢弃一些系数并重新压缩。 如果你稍微有点咄咄逼人,那就放回一些系数并再次压缩。 这一切都相当快。

您可以使用Drawing.Image类进行大量调整以调整图像大小。

关于如何做到这一点有很多问题。 这是一个 。

就大小而言 – 在resize操作后你不会知道大小是多少。 唯一可以确定的方法是resize,检查结果,如果太大,请尝试调整质量较低的大小。 重复直到完成。

如果您知道尺寸和颜色深度,则可以近似尺寸, 如此 (相同?)问题的答案中所述。

粗略估计如下:

size(KB) = (width * height * bitdepth) / (8 * 1024)

由于文件信息(压缩信息等),文件大小增加了一些。