2009-12-20 7 views

Répondre

11

Ces méthodes vous permettent de sauvegarder et de récupérer une image à partir du répertoire des documents sur l'iphone

+ (void)saveImage:(UIImage *)image withName:(NSString *)name { 
    NSData *data = UIImageJPEGRepresentation(image, 1.0); 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name]; 
    [fileManager createFileAtPath:fullPath contents:data attributes:nil]; 
} 

+ (UIImage *)loadImage:(NSString *)name { 
    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:name];  
    UIImage *img = [UIImage imageWithContentsOfFile:fullPath]; 

    return img; 
} 
+0

Merci pour le temps de réponse rapide. Et une réponse précise. – Jaba

+4

Et d'où provient documentsDirectory? – jjxtra

+2

Détails sur le répertoire de documents ici http://stackoverflow.com/questions/6907381/what-is-the-documents-directory-nsdocumentdirectory/6907432#6907432 –

2

En outre, vous ne voulez jamais d'enregistrer quoi que ce soit dans le répertoire tmp réel que vous voulez autour après l'application s'arrête. Le répertoire tmp peut être purgé par le système. Par définition, il existe uniquement pour contenir des fichiers mineurs nécessaires uniquement lorsque l'application est en cours d'exécution.

Les fichiers que vous souhaitez conserver doivent toujours entrer dans le répertoire documents.

+0

Merci je ne le savais pas – Jaba

1

Le Untested Swift tweak pour réponse choisie:

class func saveImage(image: UIImage, withName name: String) { 
    let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String 
    var data: NSData = UIImageJPEGRepresentation(image, 1.0)! 
    var fileManager: NSFileManager = NSFileManager.defaultManager() 

    let fullPath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(name) 
    fileManager.createFileAtPath(fullPath.absoluteString, contents: data, attributes: nil) 
} 

class func loadImage(name: String) -> UIImage { 
    var fullPath: String = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent(name).absoluteString 
    var img:UIImage = UIImage(contentsOfFile: fullPath)! 
    return img 
} 
2

Testé Code pour rapidement

//to get document directory path 
    func getDocumentDirectoryPath() -> NSString { 
     let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true) 
     let documentsDirectory = paths[0] 
     return documentsDirectory 
    } 

Appel à l'aide

if let data = UIImagePNGRepresentation(img) { 
    let filename = self.getDocumentDirectoryPath().stringByAppendingPathComponent("resizeImage.png") 
    data.writeToFile(filename, atomically: true) 
} 
2

Swift 3 xCode 8,2

Documents répertoire obtention:

func getDocumentDirectoryPath() -> NSString { 
    let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true) 
    let documentsDirectory = paths[0] 
    return documentsDirectory as NSString 
} 

économies:

func saveImageToDocumentsDirectory(image: UIImage, withName: String) -> String? { 
    if let data = UIImagePNGRepresentation(image) { 
     let dirPath = getDocumentDirectoryPath() 
     let imageFileUrl = URL(fileURLWithPath: dirPath.appendingPathComponent(withName) as String) 
     do { 
      try data.write(to: imageFileUrl) 
      print("Successfully saved image at path: \(imageFileUrl)") 
      return imageFileUrl.absoluteString 
     } catch { 
      print("Error saving image: \(error)") 
     } 
    } 
    return nil 
} 

Chargement:

func loadImageFromDocumentsDirectory(imageName: String) -> UIImage? { 
    let tempDirPath = getDocumentDirectoryPath() 
    let imageFilePath = tempDirPath.appendingPathComponent(imageName) 
    return UIImage(contentsOfFile:imageFilePath) 
} 

Exemple:

//TODO: pass your image to the actual method call here: 
let pathToSavedImage = saveImageToDocumentsDirectory(image: imageToSave, withName: "imageName.png") 
if (pathToSavedImage == nil) { 
    print("Failed to save image") 
} 

let image = loadImageFromDocumentsDirectory(imageName: "imageName.png") 
if image == nil { 
    print ("Failed to load image") 
} 
0

mise en œuvre rapide 4:

// saves an image, if save is successful, returns its URL on local storage, otherwise returns nil 
func saveImage(_ image: UIImage, name: String) -> URL? { 
    guard let imageData = UIImageJPEGRepresentation(image, 1) else { 
     return nil 
    } 
    do { 
     let imageURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent(name) 
     try imageData.write(to: imageURL) 
     return imageURL 
    } catch { 
     return nil 
    } 
} 

// returns an image if there is one with the given name, otherwise returns nil 
func loadImage(withName name: String) -> UIImage? { 
    let imageURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent(name) 
    return UIImage(contentsOfFile: imageURL.path) 
} 

Exemple d'utilisation (en supposant que nous avons une image):

let image = UIImage(named: "milan") 

let url = saveImage(image, name: "savedMilan.jpg") 
print(">>> URL of saved image: \(url)") 

let reloadedImage = loadImage(withName: "savedMilan.jpg") 
print(">>> Reloaded image: \(reloadedImage)")