J'écris une application Swift pour iOS. Je souhaite savoir comment obtenir une image à partir de la pellicule de la caméra de l'utilisateur (ou le nom de l'utilisateur) et la sauvegarder localement dans l'application pour pouvoir la référencer ultérieurement. Comment s'y prendrait-on? Par exemple, supposons que je souhaite obtenir l'image et la définir comme image d'un UIImageView dans mon storyboard.
C’est exactement ce que UIImagePickerController
combiné à NSUserDefaults
fera.
Pour vous, ce sera une tâche en deux parties. Vous devez d’abord capturer l’image avec une variable UIImagePickerController
, puis l’enregistrer dans sa photothèque ou la stocker sur son appareil avec NSUserDefaults
.
Pour stocker une image avec NSUserDefaults
, voir cette question .
Voici ma combinaison.
Enregistrement de l'image:
let imageData = NSData(data:UIImagePNGRepresentation(pickedimage))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
print(fullPath)
Obtenir une image:
let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
{
if paths.count > 0
{
if let dirPath = paths[0] as? String
{
let readPath = dirPath.stringByAppendingPathComponent("yourNameImg.png")
let image = UIImage(contentsOfFile: readPath)
UploadImagePreview.image = image
}
}
}
Nous pouvons essayer avec Photos Framework de récupérer la dernière image enregistrée.
var fetchOptions: PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
var fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
if (fetchResult.firstObject != nil) {
var lastAsset: PHAsset = fetchResult.lastObject as! PHAsset
PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: self.UploadImagePreview.bounds.size, contentMode: PHImageContentMode.AspectFill, options: PHImageRequestOptions(), resultHandler: { (result, info) -> Void in
self.UploadImagePreview.image = result
})
}
Ray Wenderlich a un excellent tutoriel pour utiliser un UIImagePickerController
pour sélectionner une image, puis utiliser le AssetsLibrary
pour enregistrer dans un album.
Il existe également des informations sur l’utilisation des filtres d’image qui sont plus nombreuses que celles que vous avez demandées dans le didacticiel.
Une fois que vous avez obtenu l’objet UIImage, vous pouvez enregistrer l’image dans un répertoire doc avec le code suivant.
let imageData = NSData(data:UIImagePNGRepresentation(wineImage.image))
let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
var docs: String = paths[0] as! String
let fullPath = docs.stringByAppendingPathComponent("yourNameImg.png")
let result = imageData.writeToFile(fullPath, atomically: true)
Vous devez absolument utiliser une variable UIImagePickerController
comme Brian l'a mentionné, une fois que vous avez l'image sélectionnée, utilisez cette approche de gestionnaire de fichiers. Je ne recommande pas d’utiliser NSUserDefaults
pour stocker des images, car cela va à l’encontre de Directives Apple :
let imageData = UIImagePNGRepresentation(selectedImage)
let paths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let imagePath = paths.stringByAppendingPathComponent("cached.png")
if !imageData.writeToFile(imagePath, atomically: false)
{
println("not saved")
} else {
println("saved")
NSUserDefaults.standardUserDefaults().setObject(imagePath, forKey: "imagePath")
}