什么是GIF
GIF(Graphics Interchange Format)的原义是“图像互换格式”,是CompuServe公司在 1987年开发的图像文件格式。GIF文件的数据,是一种基于LZW算法的连续色调的无损压缩格式。其压缩率一般在50%左右,它不属于任何应用程序。目前几乎所有相关软件都支持它,公共领域有大量的软件在使用GIF图像文件。GIF图像文件的数据是经过压缩的,而且是采用了可变长度等压缩算法。GIF格式的另一个特点是其在一个GIF文件中可以存多幅彩色图像,如果把存于一个文件中的多幅图像数据逐幅读出并显示到屏幕上,就可构成一种最简单的动画。(百度百科)
iOS中GIF图片显示
iOS中最常用的图片显示控件是UIImageView
,最简单的代码示例如下:
let imageView = UIImageView(frame: CGRect.zero)
let url = NSBundle.mainBundle().pathForResource("cat", ofType: "gif")!
let image = UIImage(contentsOfFile: url)
imageView.image = image
但是当我们这么做的时候发现GIF并没有动起来,而是取了第一帧做静态图片.那么怎么解决呢?最简单的方法是利用UIImageView
的animationImages
,或者利用UIImage
的animatedImageWithImages(images:, duration: )
来获取动态的图片.那么难点就在于拆解GIF为一组图片.这时候就需要用到ImageIO
的一个简单的拆分功能了,代码如下:
let url = NSBundle.mainBundle().pathForResource("cat", ofType: "gif")!
let data = NSData(contentsOfFile: url)!
let src = CGImageSourceCreateWithData(data, nil)!
var images = [UIImage]()
let count = CGImageSourceGetCount(src)
for index in 0..<count {
let cgImage = CGImageSourceCreateImageAtIndex(src, index, nil)
images.append(UIImage(CGImage: cgImage!))
}
在之后就非常简单了,如利用UIImage
的动态图片获取方法:
imageView.image = UIImage.animatedImageWithImages(images, duration: 0.25)
再如直接使用UIImageView
设置一组动态图:
imageView.animationImages = images
imageView.animationDuration = 1.0/30.0 // 默认1/图片数量
imageView.animationRepeatCount = 10 // 默认 0(无限)
网友评论