web-dev-qa-db-ja.com

iOS&Swift-ユーザーからUIImageを取得して保存するにはどうすればよいですか?

私はSwiftアプリを書いています。ユーザーのカメラロール(または最近彼らが呼んでいるもの)から画像を取得し、アプリ内にローカルに保存する方法を知りたいです後で参照できるようにします。これについてはどうすればよいでしょうか。例として、画像を取得して、ストーリーボードのUIImageViewの画像として設定するとします。

9
quillford

これはまさに UIImagePickerController と組み合わせて NSUserDefaults が行うことです。

あなたにとって、それは2つの部分からなるタスクになります。まず、UIImagePickerControllerを使用して画像をキャプチャしてから、フォトライブラリに保存するか、NSUserDefaultsを使用してデバイスに保存する必要があります。

NSUserDefaultsで画像を保存するには、 この質問 を参照してください。

5
Brian Tracy

これが私の組み合わせです。

画像の保存:

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
    })
}
4
A.G

Ray Wenderlichには すばらしいチュートリアル があります。UIImagePickerControllerを使用して画像を選択し、AssetsLibraryを使用してアルバムに保存します。

チュートリアルで要求した以上の画像フィルターの使用に関する情報もあります。

2
Steve Rosenberg

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)
2
dpizzuto

ブライアンが述べたように、必ず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")
}
0
Ever Uribe