ALAsset类代表相册中的每个资源文件,可以通过它获取照片的相关信息,及其对应的原图,全屏图,缩略图等。
当我们想通过一个照片的ALAsset对象,来获取这张照片的原图并将其转换成NSData数据,有如下两种方法:
方法一:将其转换成UIImage对象,再通过UIImageJPEGRepresentation或UIImagePNGRepresentation方法转成NSData
这种方法不推荐,因为这个其实对图片进行了压缩转换,不再是图片的原始数据(像如果是gif动态图会变成静态图片),同时照片原来附带的拍摄信息什么的也会丢失。
1
2
3
|
var representation = myAsset.defaultRepresentation()
var image = UIImage ( CGImage :representation.fullResolutionImage().takeUnretainedValue())
var data: NSData = UIImageJPEGRepresentation (image, 1.0)
|
方法二:直接复制图片的字节数据
推荐,这样得到的是实际的数据
1
2
3
4
5
|
var representation = myAsset.defaultRepresentation()
var imageBuffer = UnsafeMutablePointer < UInt8 >.alloc( Int (representation.size()))
var bufferSize = representation.getBytes(imageBuffer, fromOffset: Int64 (0),
length: Int (representation.size()), error: nil )
var data: NSData = NSData (bytesNoCopy:imageBuffer ,length:bufferSize, freeWhenDone: true )
|
附:通过ALAsset获取缩略图
1
2
|
var image = UIImage ( CGImage :myAsset.thumbnail().takeUnretainedValue())
var data: NSData = UIImageJPEGRepresentation (image, 1.0);
|
|
请发表评论