我有一个大约 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 颜色/帧数考虑到这个算法中。谢谢