从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
。
-
如果你只是想在你的程序中的其他地方使用它,原来的UIImage将会很好(我认为在这里并不是这样)
-
如果你想序列化,
UIImagePNGRepresentation(...)
将工作,但如果原始是一个JPEG将会过大;UIImageJPEGRepresentation(...)
通常会导致稍微超大的数据,并且如果您的原始文件是PNG,则会有点损失。 根据图像的显示方式和期望提供的格式来select一个应该是可以的。 如果您恰好在使用PNG并希望使用PNG,则应该获得一个很好的文件大小和几乎相同的数据,除了特殊的PNG块。 -
如果您想获得原始数据的精确副本(可能是在缩略图之后保存文件或将其保存到SHA1),则需要单独保留该文件。 你可能会这样做:
var image:UIImage var imageData:NSData { didSet { image = UIImage(data: imageData) } }
自从上面的答案给出以来,事情已经发生了变化,对于那些仍然在寻找,因为他们共享CipherCom的担忧:iOS 5已经添加了CIImage属性 。