2008-11-02 17 views
58

Je suis en train de charger UIImage objet de NSData, et l'exemple de code était à NSImage, je suppose qu'ils devraient être les mêmes. Mais maintenant, en chargeant l'image, je me demande quel est le meilleur pour résoudre le problème UIImage de chargement NSData.NSData et UIImage

Répondre

43

UIImage a une méthode - initWithData:. De la docs: "Les données dans le paramètre de données doivent être formatées pour correspondre au format de fichier de l'un des types d'images pris en charge par le système." TheData doit être un objet NSData qui contient déjà les données

+0

Oui, c'est ce que je me sers . Le NSData a l'adresse, tandis qu'après l'appel UIImaeg -initWithData: theData, le point devient 0. Je ne suis pas sûr où voir le message d'erreur. – BlueDolphin

3

Vous devez charger/télécharger le fichier sur l'objet NSData avant de l'utiliser. Vous pouvez l'inspecter en utilisant NSLog sur theData et voir s'il contient les données valides.

105

Je n'ai pas essayé UIImageJPEGRepresentation() avant, mais UIImagePNGRepresentation fonctionne bien pour moi, et la conversion entre NSData et UIImage est mort simple:

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

Essayez ceci pour convertir une image en NSData:

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

Pour une exécution sécurisée du code, utilisez le bloc if-let avec Data, comme la fonction UIImagePNGRepresentation renvoie, valeur facultative.

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

Note: Les données est Swift 3 classe. Utilisation des données au lieu de NSData avec Swift 3

opérations d'image génériques (comme png & jpg à la fois):

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... 
    } 
}