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
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."
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.
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];
das Versuchen, ein Bild zu NSData konvertieren:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
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...
}
}
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