Nsdata und uiimage
-
05-07-2019 - |
Frage
Ich versuche zu laden UIImage
Objekt von NSData
, und der Beispielcode war zu NSImage
, Ich denke, sie sollten gleich sein. Aber gerade jetzt laden ich das Bild, ich frage mich, was das Beste ist, um die Fehler zu beheben UIImage
Wird geladen NSData
Ausgabe.
Lösung
Uiimage hat eine -initWithData:
Methode. Aus den Dokumenten: "Die Daten im Datenparameter müssen so formatiert werden, dass sie mit dem Dateiformat eines der unterstützten Bildtypen des Systems übereinstimmen."
Andere Tipps
Ich habe es nicht versucht UIImageJPEGRepresentation()
vorher, 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];
Versuchen Sie dies, um ein Bild in NSDATA umzuwandeln:
UIImage *img = [UIImage imageNamed:@"image.png"];
NSData *data1 = UIImagePNGRepresentation(img);
thedata sollte a sein NSData
Objekt, das die Daten bereits enthält. Sie müssen die Datei zum Laden/Herunterladen in die durchführen NSData
Objekt bevor es verwendet wird. Sie können es untersuchen, indem Sie es verwenden NSLog
auf thedata und prüfen Sie, ob es die gültigen Daten enthält.
Verwenden Sie zur sicheren Ausführung des Codes den IF-LET-Block mit Daten, da die Funktion uiimagepnGrePresentation den optionalen Wert zurückgibt.
if let img = UIImage(named: "Hello.png") {
if let data:Data = UIImagePNGRepresentation(img) {
// Handle operations with data here...
}
}
Notiz: Daten ist Swift 3 -Klasse. Verwenden Sie Daten anstelle von NSDATA mit Swift 3
Generische Bildoperationen (wie PNG & JPG beides):
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 Verwendung von 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...
}
}