2008-11-02 13 views
58

Ich versuche, UIImage Objekt von NSData zu laden, und der Beispielcode war NSImage, ich denke, sie sollten gleich sein. Aber gerade jetzt das Bild zu laden, frage ich mich, was ist das Beste, um die loading NSData Problem zu beheben.NSData und UIImage

Antwort

43

UIImage hat eine - initWithData: Methode. Aus der Dokumentation: "Die Daten im Datenparameter müssen so formatiert sein, dass sie dem Dateiformat eines der unterstützten Bildtypen des Systems entsprechen."

+0

Ja, das ist, was ich verwende . Der NSData hat eine Adresse, während nach dem Aufruf UIImaeg -initWithData: theData der Punkt 0 wird. Ich bin mir nicht sicher, wo ich die Fehlermeldung sehen soll. – BlueDolphin

3

theData sollte ein NSData Objekt sein, das bereits die Daten enthält. Sie müssen das Laden/Herunterladen der Datei auf das Objekt NSData durchführen, bevor es verwendet wird. Sie können es überprüfen, indem Sie in den Daten NSLog verwenden und sehen, ob es die gültigen Daten enthält.

105

Ich habe nicht versucht UIImageJPEGRepresentation() vor, aber UIImagePNGRepresentation funktioniert gut für mich, und die Konvertierung zwischen NSData und UIImage ist tot einfach:

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

das Versuchen, ein Bild zu NSData konvertieren:

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

Verwenden Sie zur sicheren Ausführung von Code if-let mit Daten blockieren, da die Funktion UIImagePNGRepresentation zurückgibt, optionaler Wert.

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

Hinweis: Daten ist Swift 3-Klasse. Verwenden Sie Data statt NSData mit Swift 3

Allgemeinbildoperationen (wie png & jpg beide):

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

Durch die Verwendung Erweiterung:

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