web-dev-qa-db-ja.com

Swift 3.0のコアデータのNSDataに対するUIImage

そのため、以前は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に移動する新しい方法はありますか?

11
Jason Brady

これを試して:

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

コードを安全に実行するために、関数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...
}
7
Krunal

Swift 4の場合、はるかに簡単です:

let imageData = image.jpegData(compressionQuality: 0)

もちろん、圧縮品質は設定する変数です。ほとんどの圧縮の場合は0、最小の圧縮の場合は1。

3
blackpepper

UIImagePNGRepresentationを使用してUIImageDataに変換すると、最初の変換で重要なメタデータが元のデータから削除されるため、データを元に戻すときに画像が歪むことがあります。

いくつかの調査の後、次のコードで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)
}
1
Ely

PNGまたはJPG画像をデータとして使用します。

PNGの場合self.imgProfilePic.image!.pngData()

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