- //加载gif
- 02
- 03 NSString *filePath = [[NSBundle mainBundle]pathForResource:@"bai3" ofType:@"gif"];
- 04
- 05 NSData *data = [NSData dataWithContentsOfFile:filePath];
- 06
- 07 CGImageSourceRef gif = CGImageSourceCreateWithData((CFDataRef)data, nil);
- 08
- 09 //获取gif的各种属性
- 10
- 11 CFDictionaryRef gifprops =(CGImageSourceCopyPropertiesAtIndex(gif,0,NULL));
- 12
- 13 NSLog(@"_______%@",gifprops);
- 14
- 15
- 16 NSInteger count =CGImageSourceGetCount(gif);
- 17
- 18 NSLog(@"________%d",count);
- 19
- 20
- 21 CFDictionaryRef gifDic = CFDictionaryGetValue(gifprops, kCGImagePropertyGIFDictionary);
- 22
- 23 CFDictionaryRef delay = CFDictionaryGetValue(gifDic, kCGImagePropertyGIFDelayTime);
- 24
- 25 NSLog(@"_______%@",delay);
- 26
- 27
- 28 //[gifDic objectForKey:(NSString *)kCGImagePropertyGIFDelayTime];
- 29
- 30 // NSNumber * w = CFDictionaryGetValue(gifprops, @"PixelWidth");
- 31
- 32 // NSNumber * h =CFDictionaryGetValue(gifprops, @"PixelHeight");
- 33
- 34 // float totalDuration = delay.doubleValue * count;
- 35
- 36 // float pixelWidth = w.intValue;
- 37
- 38 // float pixelHeight = h.intValue;
- 39
- 40 //将gif解析成UIImage类型对象,并加进images数组中
- 41
- 42
- 43 NSMutableArray *images = [NSMutableArray arrayWithCapacity:count];
- 44
- 45 for(int index=0;index<count;index++)
- 46
- 47 {
- 48
- 49 CGImageRef ref = CGImageSourceCreateImageAtIndex(gif, index, nil);
- 50
- 51 UIImage *img = [UIImage imageWithCGImage:ref];
- 52
- 53 [images addObject:img];
- 54
- 55 CFRelease(ref);
- 56
- 57 }
- 58
- 59 CFRelease(gifprops);
- 60
- 61 CFRelease(gif);
Gif的合成
- - (void)exportAnimatedGif:(CGImageSourceRef )gif :(NSMutableArray *)images
- 02
- 03 {
- 04
- 05 NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"animated.gif"];
- 06
- 07 CGImageDestinationRef destination = CGImageDestinationCreateWithURL(( CFURLRef)[NSURL fileURLWithPath:path],
- 08
- 09 kUTTypeGIF,
- 10
- 11 images.count,
- 12
- 13 NULL);
- 14
- 15 UIImage *image;
- 16
- 17 for (int i = 0; i<images.count; i++)
- 18
- 19 {
- 20
- 21 image = images[i];
- 22
- 23 CFDictionaryRef gifprops =(CGImageSourceCopyPropertiesAtIndex(gif,i,NULL));
- 24
- 25 CFDictionaryRef gifDic = CFDictionaryGetValue(gifprops, kCGImagePropertyGIFDictionary);
- 26
- 27 NSNumber *delay = CFDictionaryGetValue(gifDic, kCGImagePropertyGIFDelayTime);
- 28
- 29 NSDictionary *gifDelay = [NSDictionary dictionaryWithObject:[NSDictionary dictionaryWithObject:delay forKey:(NSString *)kCGImagePropertyGIFDelayTime]
- 30
- 31 forKey:(NSString *)kCGImagePropertyGIFDictionary];
- 32
- 33
- 34
- 35 CGImageDestinationAddImage(destination,image.CGImage, (CFDictionaryRef)gifDelay);
- 36
- 37 CGImageDestinationSetProperties(destination, ( CFDictionaryRef)gifprops);
- 38
- 39 }
- 40
- 41
- 42
- 43 // CGImageDestinationSetProperties(destination, ( CFDictionaryRef)gifprops);
- 44
- 45 CGImageDestinationFinalize(destination);
- 46
- 47 CFRelease(destination);
- 48
- 49 NSLog(@"animated GIF file created at %@", path);
- 50
- 51
- 52 }
24.将一个UIView对象的内容保存为UIImage
- + (UIImage*)imageFromView:(UIView*)view{
- 02
- 03 UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, view.layer.contentsScale);
- 04
- 05 [view.layer renderInContext:UIGraphicsGetCurrentContext()];
- 06
- 07 UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- 08
- 09 UIGraphicsEndImageContext();
- 10
- 11 return image;
- 12
- 13 }
注意:生成的图片的scale和view的scale一致,这样才可以保证图片的效果和view显示的完全一致,使用renderInContext方法可以让subviews的内容也显示的图片里。