投影 GIF 文件大小的算法或数学?

Posted

技术标签:

【中文标题】投影 GIF 文件大小的算法或数学?【英文标题】:Algorithm or math to project a GIF file size? 【发布时间】:2013-08-12 01:59:23 【问题描述】:

我有一个大约 10mb 的用户动画 gif 文件。我想允许用户上传它并让我将它托管在我的服务器上,但我想重新调整它以适应最大 5mb 的文件大小,以节省盗链的带宽。

我现在有一个基本方法,可以根据像素表面积确定targetWidthtargetHeight

效果很好:

    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 文件大小的算法或数学?的主要内容,如果未能解决你的问题,请参考以下文章

phantomjs 输出文件大小:png v gif

当文件大小大于 2mb 时,Imagick 无法调整 GIF 图像的大小

Magick.net 调整 GIF 大小,最终文件更大

我认为 PNG 在大小方面比 gif 具有更好的文件压缩率。那为啥我的 PNG 比我的 gif 大?我用pycharm转换文件

在不破坏动画的情况下调整动画 GIF 文件的大小

动画 gif 与视频与画布 - 速度和文件大小