У меня есть анимированный gif-файл пользователя, который составляет около 10 Мб. Я бы хотел, чтобы пользователи загружали его и позволяли мне размещать его на моем сервере, но я бы хотел его перемасштабировать, чтобы он соответствовал максимальному размеру файла 5 МБ, чтобы сохранить пропускную способность от hotlinking.Алгоритм или математика для определения размера файла GIF?
У меня есть базовый метод прямо сейчас, который определяет targetWidth
и targetHeight
на основе площади поверхности пикселя.
Он работает достаточно хорошо:
CGFloat aspectRatio = originalHeight/originalWidth;
CGFloat reductionFactor = desiredFileSize/originalFileSize;
CGFloat targetSurfaceArea = originalSurfaceArea * reductionFactor;
int targetHeight = targetSurfaceArea/sqrt(targetSurfaceArea/aspectRatio);
int targetWidth = targetSurfaceArea/targetHeight;
его довольно точно, напр. результаты: файл размером 27 МБ превратится в 3.3mb, или 13.9mb превратится в 5.5mb.
Я хотел бы настроить эту точность, чтобы приблизиться к 5 МБ, и я надеялся, что кто-то узнает немного больше о том, как gif цвет/количество кадров может быть лучше учтено в этом алгоритме. Спасибо
вы хотите изменить размер вашего изображения? поэтому может быть уменьшен размер файла также>? – iPatel
@iPatel да, я пытаюсь уменьшить размер файла, изменив размер изображения. Я хотел бы решить для 5mb = ширина и высота – user339946