在Swift 3.0中使用NSData获取核心数据

问题描述 投票:11回答:6

所以以前,在Swift 2.2中我可以使用Entity.image = UIImagePNGRepresentation(UIImage(named: "Image Name")!)

但现在在Swift 3.0中,似乎我们现在必须使用额外的步骤。 Entity.image = NSData(data: UIImagePNGRepresentation(UIImage(named: "Image Name")!))或相当于UIImage(name: "Image Name")的对象

Swift 3.0中有一种新方法可以从UIImage转到NSData吗?

ios swift3 uiimage ios10 nsdata
6个回答
33
投票

试试这个:

if let img = UIImage(named: "hallo.png") {
    let data = UIImagePNGRepresentation(img) as NSData?
}

7
投票

为了安全执行代码,使用带有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中使用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...
}

通过使用扩展名:

extension UIImage {

    var pngRepresentationData: Data? {
        return UIImagePNGRepresentation(self)
    }

    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 = img.jpegRepresentationData {
              handleOperationWithData(data: data)     
      }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
}

3
投票

对于Swift 4,它更容易:

let imageData = image.jpegData(compressionQuality: 0)

当然,压缩质量是您设置的变量。 0表示大多数压缩,1表示压缩程度最低。


1
投票

使用UIImagePNGRepresentation将UIImage转换为Data有时会在将数据转换回来时导致图像失真,因为在初始转换过程中会从原始数据中删除一些必要的元数据。

经过一些研究后,我最终得到以下代码将UIImage转换为Data

let image = UIImage(named: "whatever")
var data: Data?

if let cgImage = image.cgImage, cgImage.renderingIntent == .defaultIntent {
    data = UIImageJPEGRepresentation(image, 0.8)
}
else {
    data = UIImagePNGRepresentation(image)
}

0
投票

使用PNG或JPG图像作为数据。

对于PNG self.image配置文件Pic.image!.pngData()

对于JPEG self.imgProfilePic.image!.jpegData(compressionQuality:1.0)//质量min = 0.0到max = 1.0


-1
投票

用作扩展以将PNG或JPG imageData作为NSData获取。

extension UIImage {
    var jpegRepresentationData: NSData! {
        return UIImageJPEGRepresentation(self, 1.0)! as NSData   // QUALITY min = 0 / max = 1
    }
    var pngRepresentationData: NSData! {
        return UIImagePNGRepresentation(self)! as NSData
    }
}

//use
imageView.image!.jpegRepresentationData or
imageView.image!.pngRepresentationData
© www.soinside.com 2019 - 2024. All rights reserved.