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
UIImage to NSData for Core Data in Swift 3.0
提问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 UIImage
to NSData
?
Swift 3.0 中是否有新的方式从UIImage
到NSData
?
回答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 UIImage
to Data
may 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 转换UIImage
为Data
有时可能会导致在将数据转换回来时图像失真,因为在初始转换时从原始数据中删除了一些必要的元数据。
After some research I ended up with the following code to convert UIImage
to 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)
}
回答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