そのため、以前は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?
}
コードを安全に実行するために、関数UIImagePNGRepresentationが返すオプションの値として、Dataでif-letブロックを使用します。
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
注意: データ is Swift 3 class。NSDataの代わりにDataを使用して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...
}
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画像をデータとして使用します。
PNGの場合self.imgProfilePic.image!.pngData()
JPEGの場合self.imgProfilePic.image!.jpegData(compressionQuality:1.0)// Quality min = 0.0 to max = 1.0