2017-07-07 10 views
2

Étant donné Data et son UTI, quelle est la bonne façon de le convertir en JPEG?Conversion en JPEG données d'image données et 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 

    } 
}) 

Répondre

1

Si c'est UTType est JPEG, vous avez déjà une bonne JPEG représentation codée de l'image. Et si vous voulez afficher cette image sur votre écran, il vous suffit d'initialiser un objet UIImage avec les données données appelant l'initialiseur init?(data:).

+0

le UTType est HEIC. Je veux transformer HEIC en JPEG – kintan

+2

Vous pouvez ignorer les nouveaux formats haute efficacité comme 'HEIC', sur le [WWDC] (https://developer.apple.com/videos/wwdc2017/) Apple les a présentés et a promis qu'ils seront être automatiquement converti en format 'JPEG' plus commun quand il le fallait. Cependant, si vous avez besoin de convertir une donnée codée 'HEIC' en' JPEG', je vous suggère de créer un 'UIImage' avec ces données et d'utiliser la fonction' UIImageJPEGRepresentation (_: _ :) 'pour l'encoder en' JPEG'. –

+0

merci. le phasset n'est pas automatiquement converti en format JPEG plus commun. – kintan

2

juste eu ce problème avec le retour des PHImageManager données .heic au lieu .jpeg, cela a fonctionné pour moi:

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() 
})