NSData和UIImage

我想从NSData加载UIImage对象,示例代码是NSImage ,我猜他们应该是相同的。 但现在加载图像,我想知道什么是最好的解决UIImage加载NSData问题。

UIImage有一个 – initWithData:方法。 从文档:“数据参数中的数据必须格式化以匹配系统支持的图像types之一的文件格式”。

我之前没有尝试过UIImageJPEGRepresentation() ,但UIImagePNGRepresentation对我来说工作正常, NSDataUIImage之间的转换很简单:

 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... } }