NSData和UIImage
我想从NSData
加载UIImage
对象,示例代码是NSImage
,我猜他们应该是相同的。 但现在加载图像,我想知道什么是最好的解决UIImage
加载NSData
问题。
UIImage有一个 – initWithData:
方法。 从文档:“数据参数中的数据必须格式化以匹配系统支持的图像types之一的文件格式”。
我之前没有尝试过UIImageJPEGRepresentation()
,但UIImagePNGRepresentation
对我来说工作正常, NSData
和UIImage
之间的转换很简单:
NSData *imageData = UIImagePNGRepresentation(image); UIImage *image=[UIImage imageWithData:imageData];
试试这个将图像转换为NSdata:
UIImage *img = [UIImage imageNamed:@"image.png"]; NSData *data1 = UIImagePNGRepresentation(img);
该数据应该是已经包含数据的NSData
对象。 在使用之前,您需要将文件加载/下载到NSData
对象。 您可以通过在Data上使用NSLog
来检查它是否包含有效数据。
为了安全执行代码,使用带有Data的if-let块,作为函数UIImagePNGRepresentation返回可选值。
if let img = UIImage(named: "Hello.png") { if let data:Data = UIImagePNGRepresentation(img) { // Handle operations with data here... } }
注意: 数据是Swift 3类。 Swift 3使用数据而不是NSData
通用图像操作(如png和jpg):
if let img = UIImage(named: "Hello.png") { if let data:Data = UIImagePNGRepresentation(img) { handleOperationWithData(data: data) } else if let data:Data = UIImageJPEGRepresentation(img, 1.0) { handleOperationWithData(data: data) } } ******* func handleOperationWithData(data: Data) { // Handle operations with data here... if let image = UIImage(data: data) { // Use image... } }
通过使用扩展:
extension UIImage { var pngRepresentationData: Data? { return UIImagePNGRepresentation(img) } var jpegRepresentationData: Data? { return UIImageJPEGRepresentation(self, 1.0) } } ******* if let img = UIImage(named: "Hello.png") { if let data = img.pngRepresentationData { handleOperationWithData(data: data) } else if let data = jpegRepresentationData { handleOperationWithData(data: data) } } ******* func handleOperationWithData(data: Data) { // Handle operations with data here... if let image = UIImage(data: data) { // Use image... } }