我正在尝试从 NSData 加载 UIImage 对象,示例代码是 NSImage ,我猜它们应该是一样的。但是刚刚加载图像,我想知道什么是解决 UIImage 加载 NSData 问题的最佳方法。

有帮助吗?

解决方案

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

其他提示

之前我没有尝试 UIImageJPEGRepresentation(),但 UIImagePNGRepresentation 对我来说很好,并且 NSData UIImage之间的转换很简单:

NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];

尝试将图像转换为NSdata:

UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);

theData应该是已经包含数据的 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类。使用数据而不是NSData   斯威夫特3

通用图像操作(如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...
     }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top