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

标签 objective-c image compression gif animated-gif

我有一个用户的动画 gif 文件,大约 10mb。我希望允许用户上传它并让我将其托管在我的服务器上,但我想重新调整它以适应 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 颜色/帧计数纳入该算法。谢谢

最佳答案

不确定您是否能找到一种简单的方法来做到这一点。在我看来,在不运行压缩算法的情况下预测文件的压缩大小是不确定的。

但是,如果您有足够的计算周期,则可以使用 approximation基于的方法。使用上面的算法为您提供图像的第一次调整大小。如果生成的文件大于 5Mb,请将调整大小百分比减半,然后重试。如果 < 5Mb,则将调整大小百分比添加 50%,然后重试。重复此操作,直到足够接近 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

等等

关于objective-c - 投影 GIF 文件大小的算法或数学?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158501/

相关文章:

iphone - 难以访问另一个 View Controller 中的对象

iphone - 无法检测运行 Action 的 Sprite 的确切位置

Android - 根据设备分辨率调整图库中图像的大小

image - 在 README.md 中插入内嵌图片

java - 使用有损 jpeg 压缩多页 tiff 图像

iphone - 为 NSString Xcode 的一部分着色

ios - 当我改变方向时,我的 View 的高度和宽度不会改变

java - 压缩和解压缩文本从 html 到服务器,反之亦然

ios - 如何快速从颜色矩阵创建图像?

在 2 节点集群中使用压缩时 Hadoop 映射任务失败。但是当作为单个节点运行时,两个节点都工作正常