【问题标题】:NSData and UIImageNSData 和 UIImage
【发布时间】:2010-09-20 10:05:48
【问题描述】:

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

【问题讨论】:

    标签: ios iphone cocoa-touch uiimage nsdata


    【解决方案1】:

    为了安全执行代码,使用带有数据的 if-let 块,作为 UIImagePNGRepresentation 函数返回的可选值。

    if let img = UIImage(named: "Hello.png") {
        if let data:Data = UIImagePNGRepresentation(img) {
           // Handle operations with data here...         
        }
    }
    

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

    【讨论】:

      【解决方案2】:

      我之前没有尝试过UIImageJPEGRepresentation(),但UIImagePNGRepresentation 对我来说效果很好,NSDataUIImage 之间的转换非常简单:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          尝试将图像转换为 NSdata:

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

            • 是的,这就是我正在使用的。 NSData 有地址,而在调用 UIImaeg -initWithData:theData 后,该点变为 0。我不确定在哪里可以看到错误消息。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-03-24
            • 2012-12-14
            • 2011-08-21
            • 1970-01-01
            相关资源
            最近更新 更多