2017-07-07 14 views
2

与えられたデータとそのUTIを、JPEGに変換する適切な方法は何ですか?与えられた画像データとUTIに変換する

PHImageManager.default().requestImageData(for: asset, options: options, resultHandler: { (imageData: Data?, dataUTI: String?, _, _) in 
    guard let imageData = imageData, let dataUTI = dataUTI else { return } 
    if !UTTypeConformsTo(dataUTI as CFString, kUTTypeJPEG) { 
     //TODO: Convert to JPEG 

    } 
}) 

答えて

1

それはUTTypeがJPEGであるなら、あなたはすでに画像の適切なJPEGエンコードされた表現を持ちます。また、その画像を画面に表示したい場合は、オブジェクトを、初期化子init?(data:)という初期化子で初期化する必要があります。

+0

をUTTypeがHEICです。 – kintan

+2

アップルが紹介した[WWDC](https://developer.apple.com/videos/wwdc2017/)で、HEICのような高効率フォーマットを無視することができます。必要に応じて自動的により一般的な「JPEG」形式に変換されます。しかし、 'HEIC'エンコードされたデータを' JPEG'に変換する必要があれば、そのデータを使って 'UIImage'を作成し、' UIImageJPEGRepresentation(_:_ :) '関数を使って' JPEG'としてエンコードすることをお勧めします。 –

+0

ありがとうございます。ファセットは自動的により一般的なJPEG形式に変換されません。 – kintan

2

ちょうどPHImageManagerが.heic代わり.JPEGとしてデータを返すと、この問題を持っていた、これは私の仕事:

PHImageManager.default().requestImageData(for: asset, options: PHImageRequestOptions(), resultHandler: { (data, string, orient, info) in 
    if string?.range(of: ".heic") != nil || string?.range(of: ".heif") != nil { 
     let rawImage = UIImage(data: data!) 
     self.uploadData = UIImageJPEGRepresentation(rawImage!, 1.0) 
     self.uploadName = "public.jpeg" 
    } else { 
     self.uploadData = data 
     self.uploadName = string 
    } 
    self.uploadFileToServer() 
}) 
関連する問題