¿Guardar el GIF generado en el rollo de la camera?

Gracias por leer. He creado un GIF usando methods de esta pregunta:

¿Crear y exportar un gif animado a través de iOS?

Estoy intentando usar el único método que parece ser capaz de save imágenes no JPG / PNG en el rollo de la camera, ALAssetLibrary 's writeImageDataToSavedPhotosAlbum:metadata:completionBlock:

Guardo el GIF en el directory temporal como este:

 NSString *exportPath = [NSTemporaryDirectory() stringByAppendingString:@"/animated.gif"]; NSURL *fileURL = [NSURL fileURLWithPath:exportPath isDirectory:NO]; 

Luego acceda a NSData como:

 NSData * gifData = [NSData dataWithContentsOfFile:fileURL.absoluteString]; 

El GIF se crea porque puedo mostrarlo en un UIImageView , pero cuando trato de savelo, el método vuelve como un éxito (sin error) pero en realidad no lo guarda (devuelve Nil para el NSURL * assetURL y lo hace no aparece en el rollo de la camera).

¿Cómo puedo get mis GIF para save con éxito en el rollo de la camera?

**

Solución 01: Solo guardando el file GIF existente en Camera Roll

**

Como entiendo tu problema. Puede generar un file GIF pero no puede save y también verlo en el rollo de camera.

Entonces adjunto una testing de muestra usando el file GIF existente.

Paso 01. Copié un file gif IMG_0009.GIF en el directory de mi documento de aplicación.

Paso 02 Que use el siguiente código para cargar estos files NSData:

 NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil]; NSURL *fileURL = [documentsDirectoryURL URLByAppendingPathComponent:@"IMG_0009.gif"]; NSData *gifData = [NSData dataWithContentsOfFile:[fileURL path]]; 

Paso 03: ahora guardo el file en el directory de medios:

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageDataToSavedPhotosAlbum:gifData metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"Success at %@", [assetURL path] ); }]; 

La URL del recurso es adecuada. Ahora puede consultar su directory de medios. puedes ubicar la image gif guardada.

Que te diviertas 🙂


**

Solución 02: Demostración de Crear y save GIF en el rollo de la camera

**

Cloné alguna solución para mostrar la creación y el ahorro de files GIF a Camera Roll. Puede download y consultar mi tenedor en github:

La demostración crea un file GIF tomando 2 o más imágenes y guarda en el directory de camera rodante

https://github.com/bllakjakk/Giraffe

El código principal para enfocar es como a continuación:

 [export encodeToFile:tempFile callback:^(NSString * aFile) { NSLog(@"Path: %@", aFile); ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; NSData *data = [NSData dataWithContentsOfURL:[[NSURL alloc]initFileURLWithPath:aFile]]; [library writeImageDataToSavedPhotosAlbum:data metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) { NSLog(@"Success at %@", [assetURL path] ); }]; 

}];

Utiliza la biblioteca como mencioné en mi solución antes http://jitsik.com/wordpress/?p=208

Cómo verificar:

Paso 01: Ejecute el proyecto de demostración.

Paso 02: Según lo indique la aplicación, agregue 2 imágenes y click Exportar.

Paso 03: ahora verifica el rollo de la camera y encontrarás el gif creado.

Anterior:

GIF es un formatting propietario, por lo que necesitaría una lib de terceros para savelo.

verifica el siguiente enlace: http://jitsik.com/wordpress/?p=208

Encontré que el problema era que no podía tomar el GIF del file. Pasé de usar CGImageDestinationCreateWithURL a CGImageDestinationCreateWithData y usé CFMutableDataRef para contener los datos Gif. No sé por qué, pero eso hizo que save el rollo de camera con el trabajo writeImageDataToSavedPhotosAlbum .

¿Se ha actualizado esto para funcionar con iOS 9 y la desaprobación de ALAssets? No veo llamadas similares en PHPhotoLibrary.