从UIImage获取底层NSData *
我可以使用[UIImage imageWithdata:]
或[UIImage initWithData]
方法从NSData创建UIImage。从UIImage获取底层NSData *
我不知道我是否可以从现有的UIImage *获得NSData *?
东西上线NSData* myData = [myImage getData];
这是不可能的吗?
谢谢
NSData *imageData = UIImageJPEGRepresentation(image, 0.7); // 0.7 is JPG quality
或
NSData *imageData = UIImagePNGRepresentation(image);
取决于如果你想在PNG格式或JPG格式的数据。
只是因为我偶然发现了这一点,我想迅速:)
这里是Caroiline的帖子的迅速转换。
var imageData = UIImagePNGRepresentation(image)
或者
var imageData = UIImageJPEGRepresentation(image, 0.7)
你可以期待着一个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) } }
当初始化一个UIImage
对象与init(data: originalData)
,那originalData
会在某种内部格式转换成原始数据。这些数据可以稍后
let rawData = myImage.cgImage?.dataProvider?.data as Data?
然而,由于rawData
是生的,它将是使用UIImagePNGRepresentation
时相比更大的检索。
我不知道为什么这个答案是经过了多次表决,也没有被接受。 OP要求检索最初给出的数据。使用'UIImageJPEGRepresentation`或`UIImagePNGRepresentation` **将**改变数据并进行重新转换。有什么方法可以真正实现所要求的吗? – CipherCom 2013-03-12 18:19:48
这个答案并不好,因为如果它已经是有损格式,它会降低图像的质量。 – 1dayitwillmake 2013-07-17 17:24:32
@CipherCom我明白你想要的确切数据。然而,我认为对于大多数遇到问题的人来说,这个答案对于他们的需求来说是完美的......因此,上涨。如果您遇到了获取原始数据的答案,请分享;) – tybro0103 2014-03-06 16:16:01