ios UIImage to NSData for Core Data in Swift 3.0

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/39822851/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 10:26:10  来源:igfitidea点击:

UIImage to NSData for Core Data in Swift 3.0

iosswift3uiimageios10nsdata

提问by Jason Brady

So previously, in Swift 2.2 I could use Entity.image = UIImagePNGRepresentation(UIImage(named: "Image Name")!)

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

But now in Swift 3.0 it appears that we now have to use an extra step. Entity.image = NSData(data: UIImagePNGRepresentation(UIImage(named: "Image Name")!))Or the object equivalent of UIImage(name: "Image Name")

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

Is there a new way in Swift 3.0 to go from UIImageto NSData?

Swift 3.0 中是否有新的方式从UIImageNSData

回答by Quang Hà

Try this:

尝试这个:

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

回答by Krunal

For safe execution of code, use if-let block with Data, as function UIImagePNGRepresentation returns, optional value.

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

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

Note: Datais Swift 3 class. Use Data instead of NSData with Swift 3

注意:数据是 Swift 3 类。在 Swift 3 中使用 Data 而不是 NSData

Generic image operations (like png & jpg both):

通用图像操作(如 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...
}

By using extension:

通过使用扩展:

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

回答by blackpepper

For Swift 4, it is a lot easier:

对于 Swift 4,它要容易得多:

let imageData = image.jpegData(compressionQuality: 0)

Of course, compression quality is a variable you set. 0 for most compression and 1 for least compression.

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

回答by Ely

Using UIImagePNGRepresentation to convert UIImageto Datamay sometimes result in distorted images when you convert the data back, because some essential metadata is removed from the original data in the initial conversion.

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

After some research I ended up with the following code to convert UIImageto Data:

经过一番研究,我最终将以下代码转换UIImageData

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

回答by sazzadhusen iproliya

Use PNG or JPG image as Data.

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

For PNG self.imgProfilePic.image!.pngData()

对于 PNG self.imgProfilePic.image!.pngData()

For JPEG self.imgProfilePic.image!.jpegData(compressionQuality: 1.0) // Quality min = 0.0 to max = 1.0

对于 JPEG self.imgProfilePic.image!.jpegData(compressionQuality: 1.0) // 质量最小值 = 0.0 到最大值 = 1.0

回答by Chowdhury Md Rajib Sarwar

Use as extension to get PNG or JPG imageData as NSData.

用作扩展以获取 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