Wenn ich habe UIImage
von einem imagePicker, wie kann ich es in einen Unterordner im Dokumentenverzeichnis speichern?
Wenn ich habe UIImage
von einem imagePicker, wie kann ich es in einen Unterordner im Dokumentenverzeichnis speichern?
Antworten:
Natürlich können Sie Unterordner im Dokumentenordner Ihrer App erstellen. Das NSFileManager
machst du früher .
Sie UIImagePNGRepresentation
konvertieren Ihr Image in NSData und speichern es auf der Festplatte.
// Create path.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Image.png"];
// Save image.
[UIImagePNGRepresentation(image) writeToFile:filePath atomically:YES];
Core Data hat übrigens nichts mit dem Speichern von Bildern auf der Festplatte zu tun.
In Swift 3:
// Create path.
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let filePath = "\(paths[0])/MyImageName.png"
// Save image.
UIImagePNGRepresentation(image)?.writeToFile(filePath, atomically: true)
.write() throws
Sie müssen eine Darstellung Ihres Bildes als ein bestimmtes Format (z. B. JPEG oder PNG) erstellen und dann writeToFile:atomically:
die Darstellung aufrufen :
UIImage *image = ...;
NSString *path = ...;
[UIImageJPEGRepresentation(image, 1.0) writeToFile:path atomically:YES];
Die oben genannten Informationen sind nützlich, beantworten jedoch nicht Ihre Frage, wie Sie in einem Unterverzeichnis speichern oder das Bild von einem UIImagePicker abrufen können.
Zunächst müssen Sie angeben, dass Ihr Controller den Delegaten der Bildauswahl in einer .m- oder .h-Codedatei implementiert, z.
@interface CameraViewController () <UIImagePickerControllerDelegate>
@end
Anschließend implementieren Sie die imagePickerController: didFinishPickingMediaWithInfo: -Methode des Delegaten. Hier können Sie das Foto aus der Bildauswahl abrufen und speichern (natürlich haben Sie möglicherweise eine andere Klasse / ein anderes Objekt, das bzw. das das Speichern übernimmt, aber ich zeige nur den Code innerhalb der Methode):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
// get the captured image
UIImage *image = (UIImage *)info[UIImagePickerControllerOriginalImage];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *imageSubdirectory = [documentsDirectory stringByAppendingPathComponent:@"MySubfolderName"];
NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.png"];
// Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to PNG spec
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:filePath atomically:YES];
}
Wenn Sie als JPEG-Bild speichern möchten, lauten die letzten 3 Zeilen:
NSString *filePath = [imageSubdirectory stringByAppendingPathComponent:@"MyImageName.jpg"];
// Convert UIImage object into NSData (a wrapper for a stream of bytes) formatted according to JPG spec
NSData *imageData = UIImageJPEGRepresentation(image, 0.85f); // quality level 85%
[imageData writeToFile:filePath atomically:YES];
extension UIImage {
/// Save PNG in the Documents directory
func save(_ name: String) {
let path: String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
let url = URL(fileURLWithPath: path).appendingPathComponent(name)
try! UIImagePNGRepresentation(self)?.write(to: url)
print("saved image at \(url)")
}
}
// Usage: Saves file in the Documents directory
image.save("climate_model_2017.png")
Zuerst sollten Sie das Verzeichnis Dokumente abrufen
/* create path to cache directory inside the application's Documents directory */
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"fileName"];
Dann sollten Sie das Foto in der Datei speichern
NSData *photoData = UIImageJPEGRepresentation(photoImage, 1);
[photoData writeToFile:filePath atomically:YES];
In Swift 4.2:
// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
// Save image.
do {
try image.pngData()?.write(to: filePath, options: .atomic)
} catch {
// Handle the error
}
}
In Swift 4:
// Create path.
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
if let filePath = paths.first?.appendingPathComponent("MyImageName.png") {
// Save image.
do {
try UIImagePNGRepresentation(image)?.write(to: filePath, options: .atomic)
}
catch {
// Handle the error
}
}