月圆之夜,紫禁之巅,一剑西来,天外飞仙。

0%

iOS学习笔记--gif图片合成

gif图片合成的过程分为以下四步:

1
2
3
4
1.获取图片数据
2.创建gif图片
3.配置gif图片
4.单帧图片添加到gif

在这之前需要在工程中添加framework:ImageIO和MobileCoreServices

1
2
#import <ImageIO/ImageIO.h>
#import <MobileCoreServices/MobileCoreServices.h>
1
2
//1.获取图片数据
NSMutableArray * imagesArray = [[NSMutableArray alloc]initWithObjects:[UIImage imageNamed:@"Documentation0.png"],[UIImage imageNamed:@"Documentation1.png"],[UIImage imageNamed:@"Documentation2.png"],[UIImage imageNamed:@"Documentation3.png"], nil];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
-(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);

}