以前,在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返回,可选值。
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
注:Data是Swift 3类。用Data代替NSData with斯威夫特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...
}
对于Swift 4,这要容易得多:
let imageData = image.jpegData(compressionQuality: 0)
当然,压缩质量是您设置的一个变量。0表示最大压缩,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)
}
使用PNG或JPG图像作为数据
PNGself.imgProfilePic.image ! .pngData ()
JPEGself. imgprofileic .image!.jpegData(compressionQuality: 1.0)//质量最小= 0.0到最大= 1.0
使用扩展名获取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