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

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

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值