Сгенерированный Gif слишком велик - ObjectiveC
Я генерирую GIF, используя следующий метод.
-(void)makeAnimatedGif:(NSArray *)imgArray {
__block NSString *fileName = [NSString stringWithFormat:@"%ld",(long)[[NSDate date] timeIntervalSince1970]];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
//Do background work
NSUInteger kFrameCount = imgArray.count;
NSDictionary *fileProperties = @{
(__bridge id)kCGImagePropertyGIFDictionary: @{
(__bridge id)kCGImagePropertyGIFLoopCount: @0, // 0 means loop forever
}
};
NSDictionary *frameProperties = @{
(__bridge id)kCGImagePropertyGIFDictionary: @{
(__bridge id)kCGImagePropertyGIFDelayTime: @0.02f, // a float (not double!) in seconds, rounded to centiseconds in the GIF data
}
};
NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil];
NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:fileName];
CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)fileURL, kUTTypeGIF, kFrameCount, NULL);
CGImageDestinationSetProperties(destination, (__bridge CFDictionaryRef)fileProperties);
for (NSUInteger i = 0; i < kFrameCount; i++) {
@autoreleasepool {
UIImage *image =[imgArray objectAtIndex:i]; //Here is the change
if (image.CGImage) {
CGImageDestinationAddImage(destination, image.CGImage, (__bridge CFDictionaryRef)frameProperties);
}
}
}
if (!CGImageDestinationFinalize(destination)) {
NSLog(@"failed to finalize image destination");
}
dispatch_async(dispatch_get_main_queue(), ^{
//Update UI
CFRelease(destination);
[self manageGifWithUrl:fileURL];
});
});
}
Проблема с моим GIF в том, что размер очень большой. Размер сгенерированного GIF колеблется от 40 до 90 МБ. Я не могу найти никакого решения для этого.
Мой imgArray содержит 180 изображений. Есть ли какое-то решение для этого?
1 ответ
Если вы хотите создать видео, закодируйте видео. Анимированные GIF-файлы ужасны для инкапсуляции видео, как анимации. Они стали настолько распространенными, потому что каждый браузер может их визуализировать. Если ваша цель - кроссплатформенное воспроизведение с наименьшим общим знаменателем, не используйте анимированные гифки.
40-80MB звучит не так уж удивительно. Чтобы уменьшить размер, уменьшите разрешение входных изображений - либо просто уменьшив их, либо уменьшив цветовую палитру, чтобы они лучше сжимались.