我可以使用[UIImage imageWithdata:]
或[UIImage initWithData]
方法從NSData創建UIImage。從UIImage獲取底層NSData *
我不知道我是否可以從現有的UIImage *獲得NSData *?
東西上線NSData* myData = [myImage getData];
這是不可能的嗎?
謝謝
我可以使用[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格式的數據。
自上述答案發布以來,事情發生了變化,對於那些仍在尋找的人來說,因爲他們共享了CipherCom的擔憂:iOS 5添加了CIImage property。
只是因爲我偶然發現了這一點,我想迅速:)
這裏是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