如果一个应用程序有业务逻辑,规定24位PNG文件的大小不能超过250KB,那么有可能预测出该图像在最大宽度和高度下仍可满足250KB的要求吗?
由于颜色深度、alpha通道等有很多变量,所以这是否可能知道?或者说离答案更近一些?
由于颜色深度、alpha通道等有很多变量,所以这是否可能知道?或者说离答案更近一些?
n
字节的函数。floor(((n - 77) * 8 - 1) / 2) * 86 + 1
因此,对于250 * 1024 = 256,000字节,我们得到88,037,427个像素。 对于一个正方形图像,大约是9383 x 9383像素。
您可以假设 PNG 文件未经压缩,从而预测其可能的最大大小。将宽度 * 高度 * 3 相乘并加上一定的标题开销。
为了更好地预测,可以测量应用程序中大量典型的 PNG 文件,并找到实际文件大小与上述预测之比最大的一个。使用此比率或稍大些的数字来估计任何其他图像的大小。
这仍然不能保证结果会足够小,您只能通过尝试编写编码图像来确定。但对于除了最恶劣情况之外的所有情况,这应该已经足够了。
编辑:如果不清楚,您可以反向计算并从最大文件大小获取图像尺寸。假设 w
和 h
是可接受的最大宽度和高度,a
是 w/h
的纵横比率,r
是上述发现的文件大小/图像大小之比:
w = sqrt((250K * a) / (r * 3))
h = w / a
a
等于1.5,r
等于0.5,您的尺寸将是500 x 333。如果您将一个巨大的空白文件保存为PNG格式,它的大小会非常小,因为PNG压缩技术的原因,但这并不可行。
如果您想要向用户提供图像尺寸,请更改您的业务逻辑,接受基于图像尺寸而不是文件大小的图像。