0
私は次の方法でgifを生成しています。生成されたGIFが大きすぎます - ObjectiveC
-(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のサイズは40MB〜90MBです。私はこれのための解決策を見つけることができません。
私のimgArrayには180個の画像が含まれています。これに修正がありますか?
あなたは同じことをするためのリンクやリソースを提供できますか?それは本当に役立つだろう。 – Dalvik
残念ながら、実際にビデオをエンコードすることは、私が多くの経験を持っていることではありません(私は何年前にGIF89aデコーダーを書きました。私はあなたが少しの調査をしたら、新しいSOの質問を提案します。 – bbum