Il mio problema principale è che ho bisogno di ottenere una miniatura per un oggetto ALAsset.Generazione di miniature personalizzate da ALAssetRepresentation
Ho provato un sacco di soluzioni e cercato overflow dello stack per giorni, tutte le soluzioni che ho trovato non funzionano per me a causa di questi vincoli:
- non posso usare la miniatura di default perché è troppo poco ;
- Non riesco a utilizzare l'immagine fullScreen o fullResolution perché ho molte immagini sullo schermo;
- non posso usare UIImage o UIImageView per il ridimensionamento perché quei carichi l'immagine a piena risoluzione
- non riesco a caricare l'immagine nella memoria, sto lavorando con le immagini 20Mpx;
- Ho bisogno di creare una versione 200x200 px della risorsa originale da caricare sullo schermo;
questa è l'ultima iterazione del codice che è venuto con:
#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];
problema è, la risultante CGImageRef
è né trasformare da orientamento, né della dimensione dei pixel massima specificata;
Ho anche cercato di trovare un modo di ridimensionamento utilizzando CGImageSource
, ma:
- l'url del risparmio non può essere utilizzato nel
CGImageSourceCreateWithURL:
; - non riesco a estrarre da
ALAsset
oALAssetRepresentation
aCGDataProviderRef
da utilizzare conCGImageSourceCreateWithDataProvider:
; CGImageSourceCreateWithData:
richiede che memorizzi la risorsa fullResolution o fullscreen in memoria per poter funzionare.
Mi manca qualcosa?
C'è un altro modo di ottenere una miniatura personalizzata da ALAsset
o ALAssetRepresentation
che mi manca?
Grazie in anticipo.
+1. I documenti non sono corretti affermando che kCGImageSourceThumbnailMaxPixelSize funzionerà per questo. Non è così. – akaru
vedere la mia risposta qui http://stackoverflow.com/questions/8116524/the-best-way-to-get-thumbnails-with-alassetslibrary/13598533#13598533 imposta la modalità di contenuto della visualizzazione delle immagini come UIViewContentModeScaleAspectFit ad esempio: imageView.contentMode = UIViewContentModeScaleAspectFit ; e usa dispatch_sync (dispatch_get_main_queue() per il file works.ALAssetsLibrary relativo all'interfaccia utente verrà eseguito in thread separato.Così suggerisco di fare gli elementi relativi all'interfaccia utente nella thread principale –