Как получить оригинальное изображение с помощью PHImageManager - PullRequest
0 голосов
/ 28 мая 2019

Я использую приведенный ниже код для получения оригинального изображения из PHAsset:

PHImageRequestOptions *requestOptions = [[PHImageRequestOptions alloc] init];
requestOptions.resizeMode   = PHImageRequestOptionsResizeModeNone;
requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

[[PHImageManager defaultManager] requestImageForAsset:phasset
                                                                   targetSize:PHImageManagerMaximumSize
                                                                  contentMode:PHImageContentModeDefault
                                                                      options:requestOptions
                                                                resultHandler:^void(UIImage *image, NSDictionary *info) {
                                                                    if (image) {
                                                                                                        }
}];

Но обнаружил, что размер изображения больше исходного размера. Я выбрал 54 MB файл, но нашел в ответ его размер 123.5MB. Используя приведенный ниже код для расчета размера изображения:

NSData *imgData = UIImageJPEGRepresentation(image, 1.0);
NSLog(@"img size: %@", [[NSByteCountFormatter new] stringFromByteCount:imgData.length]);

Любая идея, как получить оригинальное изображение с помощью [[PHImageManager defaultManager] requestImageForAsset: API.

1 Ответ

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

Используйте следующий код, чтобы получить оригинальное изображение. У меня есть код в Swift, вы должны преобразовать его в Objective-C

PHImageManager.default().requestImage(for: phAssets.firstObject!, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestOption) { (image, dictResult) in

    // Get file path url of original image.
    if let url = dictResult!["PHImageFileURLKey"] as? URL {
        self.getImageFromFileUrl(url)
    }
}


func getImageFromFileUrl(_ fileUrl: URL) {

    // Get dat from url, here I have not using catch block, you must use it for swift.
    let imageData = try? Data(contentsOf: fileUrl)

    // Get image from data
    let image = UIImage(data: imageData!)

    // Size count, which is same as original image
    let size = ByteCountFormatter()
    print("image size = \(size.string(fromByteCount: Int64(imageData!.count)))")
}

Для получения дополнительной информации я добавил комментарий над строкой кода.

Надеюсь, это поможет вам.

...