HOME > 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から画像を取り出すには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!");
}
}
});
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);
2021-05-14 14:21:41 | WatchOSのwatchconnectivityのFiletransferの落とし穴。と、避け方。
AppleWatch 実機だと成功するんだけど、シュミレーターだと失敗するという、、、
昔作成してた時は成功してたのになーと思って調べると、どうやら昔は成功してたみたい。watchOS6以降は... |
2021-05-06 14:04:37 | LINEのアニメーションスタンプ制作の落とし穴、、、失敗談
ゴールデンウィークにLINEスタンプを作成してみました。
作り切って申請も通したんですが、意図したアニメーションと違う、、、、
LINEクリエーターの画面だと、アニメーションのプレビュー... |
2021-05-01 18:05:35 | 久しぶりのAdmobをobjective-cに実装。コンパイルエラーだらけ。バーミッション不具合でエミュレータにインスコできない。
忘れないようにメモ
エミュレータにアプリをインストールする際にパーミッション系のエラーがでた時、また、iphone実機にインストールする際にも権限系のエラーが出る場合。
ターゲット→ex... |
Tweet | |||
|