从UIImage获取底层NSData *

我可以使用[UIImage imageWithdata:][UIImage initWithData]方法从NSData创buildUIImage。

我想知道是否可以从现有的UIImage *获得NSData *?
NSData* myData = [myImage getData];

这是不可能的吗?
谢谢

 NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality 

要么

 NSData *imageData = UIImagePNGRepresentation(image); 

取决于您是否想要PNG格式或JPG格式的数据。

只是因为我偶然发现,我喜欢迅速:)

这是Caroiline的post的快速翻译。

 var imageData = UIImagePNGRepresentation(image) 

要么

 var imageData = UIImageJPEGRepresentation(image, 0.7) 

你可以预期UIImage是一个格式化显示对象,所以不会使用原始数据(可能是PNG或JPEG格式),但更可能是一个像素数组或其他一些内部格式。 换句话说, UIImage(data: foo)不会保留foo

  1. 如果你只是想在你的程序中的其他地方使用它,原来的UIImage将会很好(我认为在这里并不是这样)

  2. 如果你想序列化, UIImagePNGRepresentation(...)将工作,但如果原始是一个JPEG将会过大; UIImageJPEGRepresentation(...)通常会导致稍微超大的数据,并且如果您的原始文件是PNG,则会有点损失。 根据图像的显示方式和期望提供的格式来select一个应该是可以的。 如果您恰好在使用PNG并希望使用PNG,则应该获得一个很好的文件大小和几乎相同的数据,除了特殊的PNG块。

  3. 如果您想获得原始数据的精确副本(可能是在缩略图之后保存文件或将其保存到SHA1),则需要单独保留该文件。 你可能会这样做:

     var image:UIImage var imageData:NSData { didSet { image = UIImage(data: imageData) } } 

自从上面的答案给出以来,事情已经发生了变化,对于那些仍然在寻找,因为他们共享CipherCom的担忧:iOS 5已经添加了CIImage属性 。