iphone - create - uiimage frame swift 4
UIImageWriteToSavedPhotosAlbum guardar como PNG con transparencia? (2)
Este es un problema que he notado antes e informado sobre los Foros de Desarrolladores de Apple 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 puede componer su imagen en la memoria, creo que algo como lo siguiente podría funcionar o al menos comenzar:
- (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!");
}
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 para tener transparencia, pero no parece haber una manera de guardarlos en un formato compatible con transparencias. Ideas?
EDITAR: No hay forma de lograr esto, sin embargo, hay otras maneras 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.
Como se señaló en esta pregunta SO, hay una manera simple de guardar pngs 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