Моя основная проблема: мне нужно получить миниатюру для объекта ALAsset.
Я пробовал много решений и искал переполнение стека в течение нескольких дней, все найденные решения не работают для меня из-за этих ограничений:
- Я не могу использовать миниатюру по умолчанию, потому что это слишком мало;
- Я не могу использовать fullScreen или fullResolution, потому что у меня много изображений на экране;
- Я не могу использовать UIImage или UIImageView для изменения размера, потому что эти нагрузки изображение fullResolution
- Я не могу загрузить изображение в память, я работаю с изображениями 20Mpx;
- Мне нужно создать версию исходного ресурса размером 200x200 пикселей для загрузки на экран;
Это последняя итерация кода, в который я пришел:
#import <AssetsLibrary/ALAsset.h>
#import <ImageIO/ImageIO.h>
// ...
ALAsset *asset;
// ...
ALAssetRepresentation *assetRepresentation = [asset defaultRepresentation];
NSDictionary *thumbnailOptions = [NSDictionary dictionaryWithObjectsAndKeys:
(id)kCFBooleanTrue, kCGImageSourceCreateThumbnailWithTransform,
(id)kCFBooleanTrue, kCGImageSourceCreateThumbnailFromImageAlways,
(id)[NSNumber numberWithFloat:200], kCGImageSourceThumbnailMaxPixelSize,
nil];
CGImageRef generatedThumbnail = [assetRepresentation CGImageWithOptions:thumbnailOptions];
UIImage *thumbnailImage = [UIImage imageWithCGImage:generatedThumbnail];
проблема заключается в том, что результат CGImageRef
не изменяется ни по ориентации, ни по указанному максимальному размеру пикселя;
Я также попытался найти способ изменения размера с помощью CGImageSource
, но:
- URL-адрес ресурса не может использоваться в
CGImageSourceCreateWithURL:
; - Я не могу извлечь из
ALAsset
илиALAssetRepresentation
aCGDataProviderRef
для использования сCGImageSourceCreateWithDataProvider:
; -
CGImageSourceCreateWithData:
требует, чтобы я сохранил полноразмерный или полноэкранный актив в памяти, чтобы работать.
Мне что-то не хватает?
Есть ли другой способ получения пользовательского эскиза из ALAsset
или ALAssetRepresentation
, который мне не хватает?
Спасибо заранее.