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). Приложение "Фото" также показывает изображение в полном разрешении. Хотел бы я знать, какую черную магию они используют.
Если кто-нибудь знает обходной путь, поделитесь, пожалуйста.