2009-09-28 37 views
8

Estoy usando UIImageWriteToSavedPhotosAlbum para guardar un UIImage en el álbum de fotos del usuario. El problema es que la imagen no tiene transparencia y es un JPG. Tengo los datos de píxeles configurados correctamente en con transparencia, pero no parece haber una manera de guardarlos en un formato compatible con transparencias. Ideas?UIImageWriteToSavedPhotosAlbum guardar como PNG con transparencia?

EDITAR: No hay forma de lograr esto, sin embargo, hay otras formas de entregar imágenes PNG al usuario. Uno de los cuales es guardar la imagen en el directorio de Documentos (como se detalla a continuación). Una vez que hayas hecho eso, puedes enviarlo por correo electrónico, guardarlo en una base de datos, etc. Simplemente no puedes ingresarlo al álbum de fotos (por ahora) a menos que sea un JPG no transparente y con pérdidas.

Respuesta

12

Este es un problema que he notado antes e informó sobre el Apple Developer Forums hace aproximadamente un año. Hasta donde yo sé, sigue siendo un problema abierto.

Si tiene un momento, por favor tómese el tiempo para presentar una solicitud de función en Apple Bug Report. Si más personas informan sobre este problema, es más probable que Apple arregle este método para generar PNG con capacidad alfa sin pérdida.

EDITAR

Si usted puede componer su imagen en la memoria, creo que algo como lo siguiente funcionaría o al menos empezar:

- (UIImage *) composeImageWithWidth:(NSInteger)_width andHeight:(NSInteger)_height { 
    CGSize _size = CGSizeMake(_width, _height); 
    UIGraphicsBeginImageContext(_size); 

    // Draw image with Quartz 2D routines over here... 

    UIImage *_compositeImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return _compositeImage; 
} 

// 
// cf. https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/FilesandNetworking/FilesandNetworking.html#//apple_ref/doc/uid/TP40007072-CH21-SW20 
// 

- (BOOL) writeApplicationData:(NSData *)data toFile:(NSString *)fileName { 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    if (!documentsDirectory) { 
     NSLog(@"Documents directory not found!"); 
     return NO; 
    } 
    NSString *appFile = [documentsDirectory stringByAppendingPathComponent:fileName]; 
    return ([data writeToFile:appFile atomically:YES]); 
} 

// ... 

NSString *_imageName = @"myImageName.png"; 
NSData *_imageData = [NSData dataWithData:UIImagePNGRepresentation([self composeImageWithWidth:100 andHeight:100)]; 

if (![self writeApplicationData:_imageData toFile:_imageName]) { 
    NSLog(@"Save failed!"); 
} 
+0

hecho y hecho. He escuchado que hay una manera de guardar imágenes en la carpeta de documentos en un formato sin pérdida. ¿Alguna idea de cómo hacerlo? – Eli

+0

He actualizado mi respuesta. Espero que esto te ayude a comenzar. –

+0

¡Hermoso! Trabajó maravillas. La imagen es un PNG y tiene transparencia, solo necesitaba encontrarla y eso fue todo. – Eli

33

Como se ha señalado en this Así que la pregunta que hay es una forma sencilla de guardar archivos PNG en sus álbumes de fotos:

UIImage* image = ...;          // produce your image 
NSData* imageData = UIImagePNGRepresentation(image);  // get png representation 
UIImage* pngImage = [UIImage imageWithData:imageData]; // rewrap 
UIImageWriteToSavedPhotosAlbum(pngImage, nil, nil, nil); // save to photo album 
+0

Gracias. Funciona de maravilla. – Bram

+0

Perfecto. Gracias por publicar. – Mrwolfy

Cuestiones relacionadas