gif图片合成的过程分为以下四步:
1.获取图片数据
2.创建gif图片
3.配置gif图片
4.单帧图片添加到gif
在这之前需要在工程中添加framework:ImageIO和MobileCoreServices
#import <ImageIO/ImageIO.h>
#import <MobileCoreServices/MobileCoreServices.h>
//1.获取图片数据
NSMutableArray * imagesArray = [[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"Documentation0.png"],[UIImage imageNamed:@"Documentation1.png"],[UIImage imageNamed:@"Documentation2.png"],[UIImage imageNamed:@"Documentation3.png"], nil];
-(void)gifPictureSynthetic:(NSMutableArray*)imagesArray
{
//2.创建gif文件
NSArray * document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * doucmentStr =[document objectAtIndex:0];
NSFileManager * filemanager =[NSFileManager defaultManager];
NSString * textdic = [doucmentStr stringByAppendingString:@"/gif"];
[filemanager createDirectoryAtPath:textdic withIntermediateDirectories:YES attributes:nil error:nil];
//路径
NSString * path = [textdic stringByAppendingString:@"test1.gif"];
NSLog(@"path = %@",path);
//3.配置gif属性
CGImageDestinationRef destion;
CFURLRef url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)path, kCFURLPOSIXPathStyle, false);
destion = CGImageDestinationCreateWithURL(url, kUTTypeGIF, imagesArray.count, NULL);
//相关属性
NSDictionary * frameDic = [NSDictionary dictionaryWithObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:0.3],(NSString *)kCGImagePropertyGIFDelayTime, nil] forKey:(NSString *)kCGImagePropertyGIFDelayTime];//延时
NSMutableDictionary * gifdic = [NSMutableDictionary dictionaryWithCapacity:2];
[gifdic setObject:[NSNumber numberWithBool:YES] forKey:(NSString *)kCGImagePropertyGIFHasGlobalColorMap];//颜色
[gifdic setObject:(NSString *)kCGImagePropertyColorModelRGB forKey:(NSString *)kCGImagePropertyColorModel];
[gifdic setObject:[NSNumber numberWithInt:8] forKey:(NSString *)kCGImagePropertyDepth];//颜色深度
[gifdic setObject:[NSNumber numberWithInt:0] forKey:(NSString *)kCGImagePropertyGIFLoopCount];//是否重复
NSDictionary * gifproperty = [NSDictionary dictionaryWithObject:gifdic forKey:(NSString *)kCGImagePropertyGIFDictionary];
//4.单帧添加到gif
for (UIImage * dimage in imagesArray)
{
CGImageDestinationAddImage(destion, dimage.CGImage, (__bridge CFDictionaryRef)frameDic);
}
CGImageDestinationSetProperties(destion, (__bridge CFDictionaryRef)gifproperty);
CGImageDestinationFinalize(destion);
CFRelease(destion);
}