Как установить mediaSubtype на PHAsset, созданный приложением - PullRequest
0 голосов
/ 03 января 2019

Я создаю приложение, предназначенное для вывода изображения с пользовательской картой глубины. Мне удалось сделать это после небольшого возни, и это прекрасно работает. Однако, несмотря на наличие карты глубины и эффекта портретной подложки, и, несмотря на то, что я смог успешно загрузить и использовать их в своем приложении, ресурс по-прежнему не имеет правильного подтипа носителя (PHAssetMediaSubtype.photoDepthEffect). Это важно для меня, так как я хочу отфильтровать галерею пользователя и отображать только те изображения, которые содержат эффект глубины, и правильный способ сделать это - запросить подтип медиа.

Кто-нибудь знает, что нужно сделать, чтобы этот подтип был правильно установлен? Я не могу найти способ изменить это и могу только предположить, что система выводит это из вспомогательных данных актива.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Вот временное решение, которое работает

Я не могу найти API для объявления фотографии глубины в качестве активного подтипа портрета, как в приложении для фотографий, когда вы нажимаете кнопку Портрет. Поэтому я создал временное исправление, пока не смогу найти решение.

При съемке фотографии я отмечаю свои фотографии с помощью photoDepthEffects, устанавливая исходное имя файла с помощью идентификатора моего приложения. Затем в считывающем устройстве я беру все ресурсы и проверяю, установлено ли для PHAssets mediaSubtype значение PHAssetMediaSubtype.photoDepthEffect. Это те, которые находятся в папке «Портреты». Это довольно быстро.

Если не найден, я смотрю, есть ли на фотографии мой флаг оригинального имени файла. Захват resourceResource довольно медленный, поэтому я проверяю только последние 200 фотографий.

Мы должны связаться со службой технической поддержки Apple и посмотреть, есть ли способ пометить фотографии в папку для портретов, как это делает приложение для фотографий.

0 голосов
/ 03 мая 2019

ниже кода покажет все изображения, снятые с камеры в портретном режиме

func getImages(){
        let assetCollection = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumDepthEffect, options: nil).firstObject!
            let result = PHAsset.fetchAssets(in: assetCollection, options: nil)
        result.enumerateObjects { (ph_asset, int, unsafe_mutable_pointer) in
            PHImageManager.default().requestImageData(for: ph_asset, options: nil, resultHandler: { (data, string, image_orientation, info) in
                self.imageData.append(data!)
                self.imageString.append(string!)
                DispatchQueue.main.async {
                    self.myCollectionView.reloadData()
                }
            })
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...