动态图的分类
- GIF : GIF图形交换格式是一种位图图形文件格式,以8位色(即256种颜色)重现真彩色的图像,诞生在windows1.0的时代,已经有27年的历史,广泛的应用在图像的网络传输中。
- WEBP : 2010年谷歌推出的图片格式,专门用来在web中使用,只有opera和chrome支持。
- APNG : 这东西是mozilla搞出来的,它是24位的,可以容纳1680万种颜色,也是为了取代GIF,目前有火狐和Safari支持。
各种格式的图片大小性能比较可以在 GIF vs APNG vs WEBP 中看到,腾讯的同学也开源了一些工具可以用来转换不同格式的动态图,比如 iSpatra 。
iOS动图的保存
iOS 的相册是支持保存 GIF 和 APNG 动图的,只是不能直接播放。用
[ALAssetsLibrary writeImageDataToSavedPhotosAlbum:metadata:completionBlock]
可以直接把 APNG、GIF 的数据写入相册。如果图省事直接用 UIImageWriteToSavedPhotosAlbum()
写相册,那么图像会被强制转码为 PNG。
目前来说,保存 UIImage 有三种方式:1.直接用 NSKeyedArchiver
把 UIImage 序列化保存,2.用 UIImagePNGRepresentation()
先把图片转为 PNG 保存,3.用 UIImageJPEGRepresentation()
把图片压缩成 JPEG 保存。
实际上,NSKeyedArchiver 是调用了 UIImagePNGRepresentation
进行序列化的,用它来保存图片是消耗最大的。苹果对 JPEG 有硬编码和硬解码,保存成 JPEG 会大大缩减编码解码时间,也能减小文件体积。所以如果图片不包含透明像素时,UIImageJPEGRepresentation(0.9)
是最佳的图片保存方式,其次是 UIImagePNGRepresentation()
。
GIF动态图的播放
1.使用UIImageView来播放
//创建UIImageView,添加到界面
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(20, 20, 100, 100)];
[self.view addSubview:imageView];
//创建一个数组,数组中按顺序添加要播放的图片(图片为静态的图片)
NSMutableArray *imgArray = [NSMutableArray array];
for (int