iOS_UIImage_Gif的分解
- /** Gif的步骤
- 1. 拿到Gifd的数据
- 2. 将Gif分解为一帧帧
- 3. 将单帧数据转为UIImage
- 4. 单帧图片保存
- */
github地址: https://github.com/mancongiOS/UIImage.git
导入:
- #import <ImageIO/ImageIO.h> // 图像的输入输出文件
- #import <MobileCoreServices/MobileCoreServices.h>
实现:
- - (void)didCompositionGif {
- //1. 拿到gif数据
- NSString * gifPathSource = [[NSBundle mainBundle] pathForResource:@"kobe" ofType:@"gif"];
- NSData * data = [NSData dataWithContentsOfFile:gifPathSource];
- #warning 桥接的意义 (__bridge CFDataRef)
- CGImageSourceRef source = CGImageSourceCreateWithData((__bridge CFDataRef)data, NULL);
- //2. 将gif分解为一帧帧
- size_t count = CGImageSourceGetCount(source);
- NSLog(@"%zu",count);
- NSMutableArray * tmpArray = [NSMutableArray arrayWithCapacity:];
- for (int i = ; i < count; i ++) {
- CGImageRef imageRef = CGImageSourceCreateImageAtIndex(source, i, NULL);
- //3. 将单帧数据转为UIImage
- UIImage * image = [UIImage imageWithCGImage:imageRef scale:[UIScreen mainScreen].scale orientation:UIImageOrientationUp];
- [tmpArray addObject:image];
- #warning CG类型的对象 不能用ARC自动释放内存.需要手动释放
- CGImageRelease(imageRef);
- }
- CFRelease(source);
- // 单帧图片保存
- int i = ;
- for (UIImage * image in tmpArray) {
- i ++;
- NSData * data = UIImagePNGRepresentation(image);
- NSArray * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
- NSString * gifPath = path[];
- NSLog(@"gifPath: %@",gifPath);
- NSString * pathNum = [gifPath stringByAppendingString:[NSString stringWithFormat:@"%d.png",i]];
- [data writeToFile:pathNum atomically:NO];
- }
- }
iOS_UIImage_Gif的分解的更多相关文章
- 06.LoT.UI 前后台通用框架分解系列之——浮夸的图片上传
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 07.LoT.UI 前后台通用框架分解系列之——强大的文本编辑器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 01.LoT.UI 前后台通用框架分解系列之——小图片背景全屏显示(可自动切换背景)
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 02.LoT.UI 前后台通用框架分解系列之——灵活的菜单栏
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 03.LoT.UI 前后台通用框架分解系列之——多样的表格
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 04.LoT.UI 前后台通用框架分解系列之——轻巧的弹出框
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 05.LoT.UI 前后台通用框架分解系列之——漂亮的时间选择器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- 08.LoT.UI 前后台通用框架分解系列之——多样的Tag选择器
LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...
- java分解质因数
package test; import java.util.Scanner; public class Test19 { /** * 分析:对n进行分解质因数,应先找到一个最小的质数k * 最小 ...
随机推荐
- Backpropagation反向传播算法(BP算法)
1.Summary: Apply the chain rule to compute the gradient of the loss function with respect to the inp ...
- Kernels
Let \(E\) be a set and \(\mathscr{E}\) a \(\sigma\)-algebra of subsets of \(E\). Assume that the ...
- 深入理解Ember-Data特性(下)
写在前面 最近比较忙,换了新工作还要学习很多全新的技术栈,并给自己找了很多借口来不去坚持写博客.常常具有讽刺意味的是,更多剩下的时间并没有利用而更多的是白白浪费,也许这就是青春吧,挥霍吧,这不是我想要 ...
- QQ揭秘:如何实现窗体靠边隐藏?【低调赠送:QQ高仿版GG 4.2 最新源码】
QQ有个靠边隐藏的功能,使用起来很方便:在屏幕上拖动QQ的主窗体,当窗体的上边沿与屏幕的上边沿对齐时,主窗体就会duang~~地隐藏起来,当将鼠标移到屏幕上边沿的对应区域时,主窗体又会duang~~显 ...
- Etag缓存在PHP和NodeJS中的实现
HTTP 提供了许多页面缓存的方案,其中属 Etag 和 Last-Modified 应用最广.本文会先介绍 Etag 的应用场景,然后说说他在 php 和 node 中的使用. 本文地址:http: ...
- (翻译)反射处理java泛型
当我们声明了一个泛型的接口或类,或需要一个子类继承至这个泛型类,而我们又希望利用反射获取这些泛型参数信息.这就是本文将要介绍的ReflectionUtil就是为了解决这类问题的辅助工具类,为java. ...
- CSS样式重置
;;;;;;;;;; } input, select { vertical-align:middle; }
- Atom
http://blog.csdn.net/crper/article/details/45647459
- xamarin UWP平台下 HUD 自定义弹窗
在我的上一篇博客中我写了一个在xamarin的UWP平台下的自定义弹窗控件.在上篇文章中介绍了一种弹窗的写法,但在实际应用中发现了该方法的不足: 1.当弹窗出现后,我们拖动整个窗口大小的时候,弹窗的窗 ...
- 大叔也说Xamarin~Android篇~监听返回键,单击返回某个webView,双击退出
回到目录 这个操作在原生android里是很容易实现的,在xamarin里也不难,在activity里有方法OnKeyDown,我们只需要重写一下就可以了,然后通过webView重新加载到要返回的页面 ...