読者です 読者をやめる 読者になる 読者になる

ObjecTips

基本Objective-Cで iOS とか OS X とか

Photos.framework でスクリーンショット画像の一覧を取得する

Tips Objective-C Photos PHAsset PHFetchResult PHImageManager PHPhotoLibrary 写真

iOS 9 β2で

PHAssetMediaSubtypePhotoScreenshot NS_AVAILABLE_IOS(9_0) = (1UL << 2)

が追加された。

これを使えば写真ライブラリからスクリーンショット画像のみを取得したり、逆にスクリーンショットを排除した画像一覧を取得する事ができる。
コードは以下

まず全ての画像アセットを取得し、enumarate する際に PHAssetMediaSubtypePhotoScreenshot マスクを使ってスクリーンショットのみを抽出する。
取得した PHAsset から画像データを取得するには PHImageManager を用いる。

実機で試したところ2009年から現在までのスクリーンショットが正しく取得できた。
保存されている画像のメタデータか何かにスクリーンショットであるという情報が入っているのか、それとも何かスクリーンショット判定のロジックが入っているのか?

PHPhotoLibrary の変更通知と合わせればスクリーンショットが撮られた事を検出するのにも使えそう。