Speichern von Bild und laden es in Swift (iOS)
Rette ich ein Bild mit der saveImage.
func saveImage (image: UIImage, path: String ) -> Bool{
let pngImageData = UIImagePNGRepresentation(image)
//let jpgImageData = UIImageJPEGRepresentation(image, 1.0) //if you want to save as JPEG
print("!!!saving image at: \(path)")
let result = pngImageData!.writeToFile(path, atomically: true)
return result
}
Neue info:
Speichern der Datei funktioniert nicht richtig ("[-] FEHLER beim SPEICHERN der DATEI" gedruckt.)--
//save your image here into Document Directory
let res = saveImage(tempImage, path: fileInDocumentsDirectory("abc.png"))
if(res == true){
print ("[+] FILE SAVED")
}else{
print ("[-] ERROR SAVING FILE")
}
Warum nicht das saveImage-Funktion speichern Sie das Bild? Zugriffsrechte?
Ältere info:
Debug-info sagt:
!!!saving image at: file:///var/mobile/Applications/BDB992FB-E378-4719-B7B7-E9A364EEE54B/Documents/tempImage
Dann ich wieder an diesem Ort mit
fileInDocumentsDirectory("tempImage")
Das Ergebnis korrekt ist.
Dann bin ich das laden der Datei über diesen Weg
let image = UIImage(contentsOfFile: path)
if image == nil {
print("missing image at: \(path)")
}else{
print("!!!IMAGE FOUND at: \(path)")
}
Der Pfad korrekt ist, aber die Meldung "fehlende Bild an..". Ist die Datei irgendwie nicht zugänglich oder nicht gespeichert? Was kann der Grund sein für dieses Verhalten?
Teste ich diesen code auf dem iphone 4 mit ios 7 und iphone 5 mit ios 7 simulator.
Bearbeiten:
1. Die fileInDocumentsDirectory Funktion
func fileInDocumentsDirectory(filename: String) -> String {
let documentsURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
let fileURL = documentsURL.URLByAppendingPathComponent(filename).absoluteString
return fileURL
}
- Überprüfen Sie das Bild im finder verfügbar ist oder nicht. und fügen Sie einige Erweiterungen für Bild -*.png oder *.jpeg.
- dont save vollständigen Pfad der Bild einfach nur speichern Sie das Bild nur name und fügen Sie den Namen mit Echtzeit-Dokument-Verzeichnis-Pfad. das ist es, da Dokumente-Verzeichnis-Pfad nie wieder dasselbe mit jedem Lauf.
- Ich habe gerade die Datei speichern und anschließend versuchen, Sie zu laden, wie es das loadImageFromPath(fileInDocumentsDirectory("abc".png"))
- fineInDocumentDirectory ist die Echtzeit-Pfad oder laden Sie aus der Datenbank?
- Ich habe den code dieser Funktion. Nur drei Zeilen.
- einfach Folgen Sie einfach der : hackingwithswift.com/example-code/media/...
- Leider nicht arbeiten können, in Swift 2.0, weil stringByAppendingPathComponent ist veraltet.
- Seien Sie vorsichtig, wo Sie speichern Sie Bilder und andere Daten. Dokumente/ sollte verwendet werden, für die von Benutzern erstellten Daten. Schauen Sie in diese Anleitung: stackoverflow.com/questions/37331529/...
- Danke. Wie es aussieht, ich will das Dokumente-Verzeichnis, denn ich bin das speichern von Benutzer-Profil-Bilder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Funktion speichern Sie ein Bild in den Ordner "Dokumente":
Zu verwenden:
Diese Funktion erhalten Sie dieses Bild:
Zu verwenden:
let success
? wie kann ich die speichern oder einfügen, oder möchtest du ein Beispiel geben, um zu sparen, auf eine Schaltfläche klicken, und drücken Sie auf die Schaltfläche andere sollte zeigen, in Bild-AnsichtiOS 12 Swift-4.2
iOS 12 wurden einige API-Änderungen.
Details
Lösung
Nutzung
Prüfergebnisse
öffnen Sie den iOS-simulator-Verzeichnis
Speichern, sollten Sie Bild-name mit Endung, damit dein Weg sollte sein, wie,
///var/mobile/Applications/BDB992FB-E378-4719-B7B7-E9A364EEE54B/Documents/tempImage.png
Und zweitens ersetzen Sie folgende Zeile,
mit
Müssen Sie false als parameter der
atomically
.Hoffe das hilft 🙂
let image = UIImage(contentsOfFile: path)
ist genau die gleiche, wie Sie es schreiben und dieser Weg sollte mit der Erweiterung. Und einmal versuchen, abrufen von inNSData
stattUIImage
von diesem Weg. Wenn Sie die Daten bekommen hat, dann bedeutet es ist ein problem, konvertieren Sie es in das Bild.saveImage(tempImage, path: fileInDocumentsDirectory("tempImage.png"))
aus, dass Antwort.abc.png
statttempImage.png
Wenn Sie möchten, laden Bild vom server, die Sie tun können, wie unten
Ashish ' s Kommentar hat eine Ahnung auf die Antwort. Wenn Sie die Dokumentation Lesen, auf
UIImage(contentsOfFile:)
Sie sagenDen
imageNamed
nennen ist smart genug, um zu versuchen die .png-und .jpg-Erweiterungen, aber diecontentsOfFile
call erwartet einen vollständigen Pfad, einschließlich der Erweiterung.Müssen Sie ein Verzeichnis erstellen, in das Dokumente-Verzeichnis zum speichern einer Datei.
Swift 5
Fand ich die Lösung auf StackOverFlow vor einiger Zeit. Ich habe mich nicht erinnern, den Autor
Vorausgesetzt yourImage ist UIImage()
und diese Funktion
}