Swift 3.0 中核心数据的 UIImage 到 NSData
UIImage to NSData for Core Data in Swift 3.0
所以以前,在 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
的新方法?
试试这个:
if let img = UIImage(named: "hallo.png") {
let data = UIImagePNGRepresentation(img) as NSData?
}
为了代码的安全执行,使用 if-let 数据块作为函数 UIImagePNGRepresentation returns,可选值。
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Note: Data is Swift 3 class. Use Data instead of NSData with
Swift 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...
}
通过使用扩展:
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...
}
用作扩展以获取 PNG 或 JPG 图像数据作为 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
使用 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)
}
对于Swift4,就简单多了:
let imageData = image.jpegData(compressionQuality: 0)
当然,压缩质量是您设置的变量。 0 表示最大压缩,1 表示最小压缩。
使用 PNG 或 JPG 图片作为数据。
对于 PNG
self.imgProfilePic.image!.pngData()
对于 JPEG
self.imgProfilePic.image!.jpegData(compressionQuality: 1.0) // 质量最小值 = 0.0 到最大值 = 1.0
所以以前,在 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
的新方法?
试试这个:
if let img = UIImage(named: "hallo.png") {
let data = UIImagePNGRepresentation(img) as NSData?
}
为了代码的安全执行,使用 if-let 数据块作为函数 UIImagePNGRepresentation returns,可选值。
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Note: Data is Swift 3 class. Use Data instead of NSData with Swift 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...
}
通过使用扩展:
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...
}
用作扩展以获取 PNG 或 JPG 图像数据作为 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
使用 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)
}
对于Swift4,就简单多了:
let imageData = image.jpegData(compressionQuality: 0)
当然,压缩质量是您设置的变量。 0 表示最大压缩,1 表示最小压缩。
使用 PNG 或 JPG 图片作为数据。
对于 PNG self.imgProfilePic.image!.pngData()
对于 JPEG self.imgProfilePic.image!.jpegData(compressionQuality: 1.0) // 质量最小值 = 0.0 到最大值 = 1.0