投影 GIF 文件大小的算法或数学?
Posted
技术标签:
【中文标题】投影 GIF 文件大小的算法或数学?【英文标题】:Algorithm or math to project a GIF file size? 【发布时间】:2013-08-12 01:59:23 【问题描述】:我有一个大约 10mb 的用户动画 gif 文件。我想允许用户上传它并让我将它托管在我的服务器上,但我想重新调整它以适应最大 5mb 的文件大小,以节省盗链的带宽。
我现在有一个基本方法,可以根据像素表面积确定targetWidth
和targetHeight
。
效果很好:
CGFloat aspectRatio = originalHeight / originalWidth;
CGFloat reductionFactor = desiredFileSize / originalFileSize;
CGFloat targetSurfaceArea = originalSurfaceArea * reductionFactor;
int targetHeight = targetSurfaceArea / sqrt(targetSurfaceArea/aspectRatio);
int targetWidth = targetSurfaceArea / targetHeight;
它相当准确,例如。结果:一个 27mb 的文件会变成 3.3mb,或者一个 13.9mb 的文件会变成 5.5mb。
我想将这个精度调整到更接近 5mb,我希望有人能更多地了解如何将 gif 颜色/帧数更好地考虑到这个算法中。谢谢
【问题讨论】:
您要调整图片大小吗?所以它也可能会减小文件大小>? @iPatel 是的,我正在尝试通过调整图像大小来减小文件大小。我想解决 5mb = 宽度和高度 【参考方案1】:不确定您是否会找到一种简单的方法来执行此操作。在我看来,在不运行压缩算法的情况下投影文件的压缩大小是不确定的。
但是,如果您有大量计算周期,则可以使用基于 approximation 的方法。使用上面的算法为您提供图像的第一次调整大小。如果生成的文件大于 5Mb,则调整大小百分比的一半,然后重试。如果
所以,例如
50% = 3.3Mb, so try halfway between 50 and 100
75% = 6.1Mb, so try halfway between 75 and 50
62.5% = 4.7Mb so try halfway between 62.5 and 75
等
【讨论】:
以上是关于投影 GIF 文件大小的算法或数学?的主要内容,如果未能解决你的问题,请参考以下文章
当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小
我认为 PNG 在大小方面比 gif 具有更好的文件压缩率。那为啥我的 PNG 比我的 gif 大?我用pycharm转换文件