Mein Hauptproblem ist, dass ich eine Miniaturansicht für ein ALAsset-Objekt erhalten muss.Generieren von benutzerdefinierten Miniaturansichten aus ALAssetRepresentation
habe ich versucht, eine Menge von Lösungen und nach Tagen Stack-Überlauf, alle Lösungen i sind nicht für mich auf diese Einschränkung durch Arbeit gefunden:
- ich nicht das Standard-Miniaturbild verwenden kann, weil es zu wenig ist ;
- Ich kann das Bild fullScreen oder fullResolution nicht verwenden, weil ich viele Bilder auf dem Bildschirm habe;
- Ich kann verwenden UIImage oder UIImageView nicht zum Ändern der Größe, da diese Lasten die fullResolution Bild
- ich das Bild im Speicher nicht geladen werden kann, arbeite ich mit 20Mpx Bildern;
- Ich muss eine 200x200 px Version des ursprünglichen Assets erstellen, um es auf dem Bildschirm zu laden;
ist dies die letzte Iteration des Code i mit kam:
#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];
Problem ist, wird das resultierende CGImageRef
weder durch Orientierung transformiert, noch der angegebenen max Pixelgröße;
Ich habe auch versucht CGImageSource
, wobei jedoch eine Möglichkeit, Ändern der Größe zu finden:
- die Asset-URL kann nicht in den
CGImageSourceCreateWithURL:
verwendet; - ich kann nicht aus
ALAsset
oderALAssetRepresentation
eineCGDataProviderRef
mitCGImageSourceCreateWithDataProvider:
zu verwenden; CGImageSourceCreateWithData:
erfordert, dass ich die fullResolution- oder Vollbild-Assets im Arbeitsspeicher speichern muss, damit sie funktionieren.
Fehle ich etwas?
Gibt es eine andere Möglichkeit, eine benutzerdefinierte Miniaturansicht von ALAsset
oder ALAssetRepresentation
zu erhalten, die ich vermisse?
Vielen Dank im Voraus.
+1. Die Dokumente stimmen nicht damit überein, dass kCGImageSourceThumbnailMaxPixelSize dafür geeignet ist. Es tut nicht. – akaru
siehe meine Antwort hier http://stackoverflow.com/questions/8116524/the-best-way-to-get-thumbnails-with-alassetslibrary/13598533#13598533 Setzen Sie Ihren Imageview Content-Modus als UIViewContentModeScaleAspectFit zB: imageView.contentMode = UIViewContentModeScaleAspectFit ; und benutze dispatch_sync (dispatch_get_main_queue() für UI related works. ALAssetsLibrary Block wird in einem separaten Thread ausgeführt. Also ich schlage vor, die UI bezogenen Sachen im Hauptthread –