我可以使用[UIImage imageWithData:]
或[UIImage initWithData]
方法从NSData创建UIImage。
我想知道我是否可以从现有的UIImage中获取NSData?
NSData *myData = [myImage getData];
答案 0 :(得分:185)
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
或
NSData *imageData = UIImagePNGRepresentation(image);
取决于您希望数据采用PNG格式还是JPG格式。
答案 1 :(得分:6)
您可以预期UIImage是为显示格式化的对象,因此不会使用原始数据(可能是PNG或JPEG格式),但更可能是像素数组或其他内部格式。换句话说,UIImage(data: foo)
不会保留foo
。
如果你只是想在你的程序中的其他地方使用它,原来的UIImage会很好(我认为这里的情况并非如此)
如果您想要序列化,UIImagePNGRepresentation(...)
会起作用,但如果原件是JPEG,则会超大; UIImageJPEGRepresentation(...)
通常会导致数据略大,如果您的原始版本为PNG,则会略有损失。根据图像的显示方式和您希望提供的格式选择一个应该是可以的。如果你碰巧使用PNG并希望PNG输出,你应该得到一个好的文件大小和几乎相同的数据,除了特殊的PNG块。
如果您想获得原始数据的精确副本(可能是在缩略图后保存文件,或者是SHA1),那么您需要单独保留它。您可以执行以下操作:
var image:UIImage
var imageData:NSData {
didSet {
image = UIImage(data: imageData)
}
}
答案 2 :(得分:4)
因为我偶然发现了这一点,我喜欢迅速:)
这是Caroiline的帖子的快速翻译。
var imageData = UIImagePNGRepresentation(image)
或者
var imageData = UIImageJPEGRepresentation(image, 0.7)
答案 3 :(得分:1)
Swift 4.2
let dataPng = image.pngData() // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
let dataJpg = image.jpegData(compressionQuality: 1) // return image as JPEG. May return nil if image has no CGImageRef or invalid bitmap format. compression is 0(most)..1(least)
答案 4 :(得分:-2)
自上述答案发布以来,情况发生了变化,对于那些仍在寻找的人,因为他们分享了CipherCom的关注:iOS 5添加了CIImage property。