Swift転職なら=>【LevTech】
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大
↑クリックして拡大

頭痛が減ったので共有です!

rebuild.fmを応援しています!

HOME > PHAssetでiPhone端末の画像を全てリストアップ

PHAssetでiPhone端末の画像を全てリストアップ

iOS8からの新機能のPhotos FrameworkのPHAssetを利用して端末に含まれる画像写真のリストアップを行ってみます。

参考:Photos Framework を使って写真.appと画像をやりとりする 参考:How to get only images in the camera roll using Photos Framework
参考:PHAsset
参考:PHImageManager
参考:【iOS】ALAssetのいじったときのメモまとめ、カメラロールから画像を!
参考:Swiftを使って「ハワイに行ったふりカメラ」をつくる
参考:ALAssetsLibraryのALAssetからNSDataを作る
参考:【iOS】iPhoneのカメラロールにアクセスするAssetsLibraryについて

ひとまずやってみました。


        //全てのカメラロールの画像を取得する。
        var assets:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil)
        println(assets.debugDescription);
        assets.enumerateObjectsUsingBlock({ obj, idx, stop in
            
            if obj is PHAsset
            {
                let asset:PHAsset = obj as PHAsset;
                println("Asset IDX:\(idx)");
                println("mediaType:\(asset.mediaType)");
                println("mediaSubtypes:\(asset.mediaSubtypes)");
                println("pixelWidth:\(asset.pixelWidth)");
                println("pixelHeight:\(asset.pixelHeight)");
                println("creationDate:\(asset.creationDate)");
                println("modificationDate:\(asset.modificationDate)");
                println("duration:\(asset.duration)");
                println("favorite:\(asset.favorite)");
                println("hidden:\(asset.hidden)");
            }
        });
        

上記、カメラロール以外からも収集してしまいますが、ひとまず簡単なサンプルです。以下の様な出力を行います。


 count=6
Asset IDX:0
mediaType:(Enum Value)
mediaSubtypes:C.PHAssetMediaSubtype
pixelWidth:1500
pixelHeight:1001
creationDate:2014-07-14 04:28:16 +0000
modificationDate:2014-07-14 04:28:16 +0000
duration:0.0
favorite:false
hidden:false
Asset IDX:1
mediaType:(Enum Value)
mediaSubtypes:C.PHAssetMediaSubtype
pixelWidth:834
pixelHeight:1250
creationDate:2014-07-14 04:28:17 +0000
modificationDate:2014-07-14 04:28:17 +0000
duration:0.0
favorite:false
hidden:false
...

収集する際のPHAssetMediaTypeImage(画像),Audio(音声),Video(動画)と変更することでそれぞれの メディアのみを収集することができます。

このPHAssetからUIImageを作成する

PHAssetから画像を取り出すにはPHImageManagerを利用します。


        //全てのカメラロールの画像を取得する。(iCloudも含む)
        var assets:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: nil)
        println(assets.debugDescription);
        assets.enumerateObjectsUsingBlock({ obj, idx, stop in
            
            if obj is PHAsset
            {
                let asset:PHAsset = obj as PHAsset;
                println("Asset IDX:\(idx)");
                println("mediaType:\(asset.mediaType)");
                println("mediaSubtypes:\(asset.mediaSubtypes)");
                println("pixelWidth:\(asset.pixelWidth)");
                println("pixelHeight:\(asset.pixelHeight)");
                println("creationDate:\(asset.creationDate)");
                println("modificationDate:\(asset.modificationDate)");
                println("duration:\(asset.duration)");
                println("favorite:\(asset.favorite)");
                println("hidden:\(asset.hidden)");
                
                
                let phimgr:PHImageManager = PHImageManager();
                phimgr.requestImageForAsset(asset,
                    targetSize: CGSize(width: 320, height: 320),
                    contentMode: .AspectFill, options: nil) {
                        image, info in
                        //ここでUIImageを取得します。
                        //self.photoImageView.image = image
                        println("UIImage get!");
                }
                
            }
        });

このfetchAssetsWithMediaTypeのFetchOptionsをいじってみる

PHFetchOptionsを利用して、creationDateが一年前より新しいデータを取得する例。あまりWebに掲載がなかったので覚書。


        let fetchOptions = PHFetchOptions();
        
        var date:NSDate = NSDate();
        date = NSDate(timeIntervalSinceNow: -365*24*60*60);//1年前
        
        fetchOptions.predicate = NSPredicate(format: "creationDate > %@", date);
        fetchOptions.sortDescriptors =  [NSSortDescriptor(key: "creationDate", ascending: false)];
        var assets:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
        println(assets.lastObject);
        

↓こんな記事もありますよ!

Facebook SDKを試してみる(調査)

先日ひょんなところからFacebookSDKの事を教えていただき、興味が足裏からフツフツと湧き出てまいりましたので本日調査してみます。

String

StringとNSStringどちらを利用することもできますが、、、

AppleWatchをNSFileCoordinatorとKeychainでデータ交換

前回の記事(ナターシャさんのサンプルデモを元に解説)の続きです。今記事はNSUserDefaultではなく、 NSFileCoordinatorとKeychain sharingを利用しての解説です。ナターシャさんのサンプルに関して前記事をご参照ください。
このエントリーをはてなブックマークに追加
右側のFacebookのLikeをクリック頂けると記事更新の際に通知されますので宜しければご利用下さい!