Question

J'essaie de charger l'objet UIImage à partir de NSData , et l'exemple de code était destiné à NSImage . Je suppose qu'ils devraient être identiques. Mais juste pour le chargement de l'image, je me demande quel est le meilleur moyen de résoudre le problème UIImage Chargement NSData .

Était-ce utile?

La solution

UIImage a une méthode - initWithData: . Dans la documentation: "Les données du paramètre data doivent être formatées pour correspondre au format de fichier de l'un des types d'image pris en charge par le système."

Autres conseils

Je n'ai pas essayé UIImageJPEGRepresentation () , mais UIImagePNGRepresentation fonctionne correctement pour moi et la conversion entre NSData et UIImage est d'une simplicité déconcertante:

NSData *imageData = UIImagePNGRepresentation(image);
UIImage *image=[UIImage imageWithData:imageData];

Essayez ceci pour convertir une image en NSdata:

UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);

theData doit être un objet NSData qui contient déjà les données. Avant de l’utiliser, vous devez charger / télécharger le fichier dans l’objet NSData . Vous pouvez l'inspecter en utilisant NSLog sur theData et voir s'il contient les données valides.

Pour une exécution en toute sécurité du code, utilisez le bloc if-let avec Data, car la fonction UIImagePNGRepresentation renvoie, valeur facultative.

if let img = UIImage(named: "Hello.png") {
    if let data:Data = UIImagePNGRepresentation(img) {
       // Handle operations with data here...         
    }
}
  

Remarque: Données correspond à la classe Swift 3. Utilisez Data au lieu de NSData avec   Swift 3

Opérations sur les images génériques (comme png et les deux 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...
     if let image = UIImage(data: data) {
        // Use image...
     }
}

En utilisant l'extension:

extension UIImage {

    var pngRepresentationData: Data? {
        return UIImagePNGRepresentation(img)
    }

    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 = jpegRepresentationData {
              handleOperationWithData(data: data)     
     }
}

*******
func handleOperationWithData(data: Data) {
     // Handle operations with data here...
     if let image = UIImage(data: data) {
        // Use image...
     }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top