【问题标题】:Algorithm or math to project a GIF file size?投影 GIF 文件大小的算法或数学?
【发布时间】: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 = 宽度和高度

标签: objective-c image compression gif animated-gif


【解决方案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

【讨论】:

    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2014-10-29
    • 2016-09-28
    • 2015-03-31
    • 2018-05-03
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多