NSData and UIImage

60

我正在尝试从NSData中加载UIImage对象,示例代码是针对NSImage的,我猜它们应该是相同的。但是在加载图像时,我想知道如何最好地解决UIImage加载NSData问题。

5个回答

106

我以前没有尝试过UIImageJPEGRepresentation(),但UIImagePNGRepresentation对我很有效,并且在NSDataUIImage之间的转换非常简单:

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

44

UIImage有一个名为-initWithData:的方法。从文档中可以得知:"data参数中的数据必须按照系统支持的图像类型之一的文件格式进行格式化。"


是的,那就是我正在使用的。NSData有地址,但在调用UIImaeg -initWithData:theData之后,该点变为0。我不确定在哪里查看错误消息。 - BlueDolphin

21

尝试使用以下代码将图像转换为NSData:

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

3

theData应该是一个包含数据的NSData对象。在使用之前,您需要将文件加载/下载到NSData对象中。您可以通过在theData上使用NSLog来检查它是否包含有效数据。


-1
为了安全地执行代码,请使用 if-let 块与 Data,因为函数 UIImagePNGRepresentation 返回可选值。
if let img = UIImage(named: "Hello.png") {
    if let data:Data = UIImagePNGRepresentation(img) {
       // Handle operations with data here...         
    }
}

注意:Data是Swift 3类。在Swift 3中使用Data而不是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...
     }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接