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
...
収集する際のPHAssetMediaTypeをImage(画像),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);
↓こんな記事もありますよ!
![]() | Pintoを1年利用してほんとにプログラマーの背筋がピンとなった(P!nto)猫背どうにかならないかな、、、、。プログラマーとしての職業上日中8割9割は画面と押し問答している私は、 熱中すればするほど画面に食い入り知らず知らずに前のめりの姿勢に。姿勢が悪い、、、、分かってるんだけど、やめられない。 |
![]() | 外部ブラウザでURLを開くアプリから外部ブラウザ(Safari)でURLを開く方法を記載します。内部的に利用する場合はWebViewを利用します。 |
![]() | AppleWatchをNSFileCoordinatorとKeychainでデータ交換前回の記事(ナターシャさんのサンプルデモを元に解説)の続きです。今記事はNSUserDefaultではなく、 NSFileCoordinatorとKeychain sharingを利用しての解説です。ナターシャさんのサンプルに関して前記事をご参照ください。 |
Tweet
![]() |
|||
|