私はSwiftアプリを書いています。ユーザーのカメラロール(または最近彼らが呼んでいるもの)から画像を取得し、アプリ内にローカルに保存する方法を知りたいです後で参照できるようにします。これについてはどうすればよいでしょうか。例として、画像を取得して、ストーリーボードのUIImageViewの画像として設定するとします。
これはまさに UIImagePickerController
と組み合わせて NSUserDefaults
が行うことです。
あなたにとって、それは2つの部分からなるタスクになります。まず、UIImagePickerController
を使用して画像をキャプチャしてから、フォトライブラリに保存するか、NSUserDefaults
を使用してデバイスに保存する必要があります。
NSUserDefaults
で画像を保存するには、 この質問 を参照してください。
これが私の組み合わせです。
画像の保存:
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)
画像を取得:
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
}
}
}
Photos Frameworkを試して、最後に保存した画像を取得できます。
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には すばらしいチュートリアル があります。UIImagePickerController
を使用して画像を選択し、AssetsLibrary
を使用してアルバムに保存します。
チュートリアルで要求した以上の画像フィルターの使用に関する情報もあります。
UIImageオブジェクトを取得したら、次のコードを使用して画像をドキュメントディレクトリに保存できます。
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)
ブライアンが述べたように、必ずUIImagePickerController
を使用する必要があります。選択したイメージを取得したら、このファイルマネージャーのアプローチを使用してください。 NSUserDefaults
を使用して画像を保存することはお勧めしません 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")
}