我使用UIImageWriteToSavedPhotosAlbum保存一个UIImage用户的相册。 问题是图像不具有透明性,是一个JPG。 我已经得到了像素数据正确地设置具有透明性,但似乎没有成为一个方式在一个透明支持的格式保存。 想法?
编辑:有没有办法做到这一点,但也有其他的方式来传递PNG图像给用户。 其中之一是保存在文件目录中的图像(如下面详述)。 一旦你做到了这一点,你可以通过电子邮件发送它,将它保存在数据库中,等你就不能让它进入相册(现在),除非它是一种有损不透明JPG。
我使用UIImageWriteToSavedPhotosAlbum保存一个UIImage用户的相册。 问题是图像不具有透明性,是一个JPG。 我已经得到了像素数据正确地设置具有透明性,但似乎没有成为一个方式在一个透明支持的格式保存。 想法?
编辑:有没有办法做到这一点,但也有其他的方式来传递PNG图像给用户。 其中之一是保存在文件目录中的图像(如下面详述)。 一旦你做到了这一点,你可以通过电子邮件发送它,将它保存在数据库中,等你就不能让它进入相册(现在),除非它是一种有损不透明JPG。
这是我之前已经注意到并报告了一个问题, 苹果开发者论坛在大约一年前。 据我所知,它仍然是一个悬而未决的问题。
如果你有时间,请大家到文件在功能要求的时间苹果错误报告 。 如果更多的人报告这个问题,它更可能是苹果会解决这个问题的方法来输出无损,α-能够PNG。
编辑
如果你可以在内存中撰写你的形象,我觉得像下面会工作,或者至少让你开始:
- (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!");
}
正如上指出了这个 SO问题有一个简单的方法来保存PNG图像在你的相册:
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