Sto usando ALAsset per recuperare le immagini del genere:Come salvare ALAsset immagine su disco velocemente su iOS?
[[asset defaultRepresentation] fullResolutionImage]]
Questo ritorno CGImageRef che voglio salvare su disco il più velocemente possibile ...
Soluzione 1:
UIImage *currentImage = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]];
NSData *currentImageData = UIImagePNGRepresentation(currentImage);
[currentImageData writeToFile:filePath atomically:YES];
Soluzione 2:
CFURLRef url = (__bridge CFURLRef)[NSURL fileURLWithPath:filePath];
CGImageDestinationRef destination = CGImageDestinationCreateWithURL(url, kUTTypePNG, 1, NULL);
CGImageDestinationAddImage(destination, [[asset defaultRepresentation] fullResolutionImage], nil);
CGImageDestinationFinalize(destination);
Il problema è che entrambi i metodi sono esecuzione molto lenta su un dispositivo. Mi bastano circa 2 secondi per immagine per eseguire questo. E questo è assolutamente troppo lungo.
Domanda: Come posso accelerare questo processo di salvataggio delle immagini? O forse c'è una soluzione migliore per questo?
UPDATE: Le migliori miglioramenti delle prestazioni in entrambe le soluzioni è quello di salvare le immagini in formato JPEG, invece di PNG. Quindi per la soluzione 1 sono stati sostituiti UIImagePNGRepresentation
con UIImageJPEGRepresentation
. Per la soluzione 2 sono stati sostituiti kUTTypePNG
con kUTTypeJPEG
.
Vale anche la pena notare che la seconda soluzione è molto più efficiente in termini di memoria.
Lo capisco. Ma c'è un altro modo più efficace per farlo? Non ho bisogno di PNG. In realtà qualsiasi formato è ok. Devo solo copiare l'immagine originale da ALAsset alla mia cartella personalizzata ...? Grazie –
Hai provato UIImageJPEGRappresentazione? –
Ho appena provato con la rappresentazione JPEG - è circa la metà più veloce della rappresentazione PNG (ancora circa 1 secondo). Questo è molto meglio. Ma ancora non quello che mi aspettavo. C'è niente altro? Che dire della differenza tra entrambe le soluzioni che ho postato in questione. Ha qualche vantaggio rispetto ad un altro? –