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); }
|