UIImageWriteToSavedPhotosAlbum为PNG保存透明度?(UIImageWr

2019-07-19 23:12发布

我使用UIImageWriteToSavedPhotosAlbum保存一个UIImage用户的相册。 问题是图像不具有透明性,是一个JPG。 我已经得到了像素数据正确地设置具有透明性,但似乎没有成为一个方式在一个透明支持的格式保存。 想法?

编辑:有没有办法做到这一点,但也有其他的方式来传递PNG图像给用户。 其中之一是保存在文件目录中的图像(如下面详述)。 一旦你做到了这一点,你可以通过电子邮件发送它,将它保存在数据库中,等你就不能让它进入相册(现在),除非它是一种有损不透明JPG。

Answer 1:

这是我之前已经注意到并报告了一个问题, 苹果开发者论坛在大约一年前。 据我所知,它仍然是一个悬而未决的问题。

如果你有时间,请大家到文件在功能要求的时间苹果错误报告 。 如果更多的人报告这个问题,它更可能是苹果会解决这个问题的方法来输出无损,α-能够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!");
}


Answer 2:

正如上指出了这个 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


文章来源: UIImageWriteToSavedPhotosAlbum save as PNG with transparency?