iOS 13 - PHImageManager возвращает уменьшенное изображение для фотографий My Photo Stream

Начиная с iOS 13, я не могу получать версии фотографий в исходном разрешении в My Photo Stream с помощью PhotoKit. За последние несколько месяцев у меня было несколько жалоб от пользователей, так что это не касается моего устройства или аккаунта. Следующий код всегда возвращает очень маленькие изображения (например, 360 x 480).

PHPhotoLibrary.requestAuthorization({ status in
    DispatchQueue.main.async {
        if status == .authorized {

            // if iCloud Photo Library is disabled and Photo Stream is enabled this will give you My Photo Stream
            let photoStream = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumMyPhotoStream, options: nil)
            if let photoStreamCollection = photoStream.firstObject {

                let res = PHAsset.fetchAssets(in: photoStreamCollection, options: nil)
                if let asset = res.firstObject {

                    let opts = PHImageRequestOptions()
                    opts.deliveryMode = .highQualityFormat
                    opts.isSynchronous = true
                    opts.isNetworkAccessAllowed = true
                    opts.resizeMode = .exact

                    print("asset size: \(asset.pixelWidth) x \(asset.pixelHeight)")

                    PHImageManager.default().requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .default, options: opts) { (img, info) in
                        if let img = img {
                            print("image size: \(img.size.width * img.scale) x \(img.size.height * img.scale)")
                        }
                    }

                    PHImageManager.default().requestImageDataAndOrientation(for: asset, options: opts) { (imgData, dateUTI, orientation, info) in
                        if let imgData = imgData {
                            if let img = UIImage(data: imgData) {
                                print("image size: \(img.size.width * img.scale) x \(img.size.height * img.scale)")
                            }
                        }
                    }
                }
            }
        }
    }
})

Консоль:
размер ресурса: 1536 x 2048
2020-02-02 08:18:44.452620-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Не удалось декодировать изображение
2020-02-02 08:18:44.468675-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Не удалось декодировать изображение
2020-02-02 08:18:44.479691-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-1-0 Не удалось декодировать изображение.
Размер изображения: 360,0 x 480,0
2020-02-02 08:18:44.485069-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Не удалось загрузить изображение из URL: file:///var/mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG
2020-02-02 08:18:44.490447-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Не удалось загрузить изображение с URL-адреса: file: /// var / mobile / Media / PhotoStreamsData / 267078714 / 100APPLE / IMG_0001.JPG
2020-02-02 08:18:44.501745-0700 photostreamphoto[7370:2576203] [ImageManager] [RM]: 1-2-0 Не удалось загрузить изображение с URL: file: /// var /mobile/Media/PhotoStreamsData/267078714/100APPLE/IMG_0001.JPG
размер изображения: 360,0 x 480,0

Я перепробовал все мыслимые комбинации опций в PHRequestOptions. Обратите внимание, что если я установилopts.version = .original он дает мне нулевое изображение и нулевое изображение.

Я также пробовал asset.requestContentEditingInput(...) чтобы попытаться получить прямой доступ к URL-адресу изображения:

let editingOpts = PHContentEditingInputRequestOptions()
editingOpts.isNetworkAccessAllowed = true
editingOpts.canHandleAdjustmentData = { data in
    return true
}
asset.requestContentEditingInput(with: editingOpts) { input, info in
    if let input = input, let url = input.fullSizeImageURL {
        let path = url.path
        let fm = FileManager.default
        if fm.fileExists(atPath: path) {
            // doesn't reach this
        }
    }
}

Консоль:

2020-02-02 08:26:49.641787-0700 photostreamphoto[7416:2578984] [PhotoKit] URL-адрес файла ресурсов ресурса недоступен, возможно, был удален, будет предпринята попытка запроса на изменение доступности

Интересно, что UIImagePicker действительно получает изображение в исходном разрешении (например, 1536 x 2048). Приложение "Фото" также показывает изображение в полном разрешении. Хотел бы я знать, какую черную магию они используют.

Если кто-нибудь знает обходной путь, поделитесь, пожалуйста.

0 ответов

Другие вопросы по тегам