objective-c – XCODE 5 iOS7如何将UIImage(PNG)转换为NSData而不会丢失透明背景

我有一个接收UI
Image的方法我将它转换为NSData并发出请求发布该数据,它适用于iOS 6但是当我尝试在iOS 7上时,图像失去了透明背景.

这是我到现在为止所尝试的:

-(void)post:(UIImage *)firm name:
{

    int x = 350;

    NSData *imageData = UIImagePNGRepresentation(firm);
    UIImage *image=[UIImage imageWithData:imageData];
    UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(10, x, 40, 50)];
    imageView.backgroundColor = [UIColor clearColor];
    imageView.image = image;


    NSData *imageData2 = [NSData dataWithData:UIImagePNGRepresentation(firm)];
    UIImage *image2=[UIImage imageWithData:imageData2];
    UIImageView *imageView2 = [[UIImageView alloc]initWithFrame:CGRectMake(160, x, 40, 50)];
    imageView2.image = image2;

    UIImageView *imageView3 = [[UIImageView alloc]initWithFrame:CGRectMake(110, x, 40, 50)];
    imageView3.image = firm;

    UIImage * img = [UIImage imageWithData:UIImagePNGRepresentation(image)];
    UIImageView *imageView4 = [[UIImageView alloc]initWithFrame:CGRectMake(210, x, 40, 50)];
    imageView4.image = img;

    [self.view addSubview:imageView];
    [self.view addSubview:imageView2];
    [self.view addSubview:imageView3];
    [self.view addSubview:imageView4];

在imageView3上我只是显示它,因为我得到它没有背景(直到这里我得到它一切都很好)但是当我转换为NSData然后将它恢复到UIImage它失去了透明度,

在iOS 7上运行的代码

在iOS 6及更低版本上运行的相同代码非常完美!!

我在Github example上创建了一个示例

最佳答案 当我在iOS7上具有透明度的图像上使用UIImagePNGRepresentation时,透明度将被保留.

例如,使用此图像:

当我使用你的代码渲染它时,我得到:

也许你开始使用的是关于图像的东西.

问题似乎源于创建图像的OpenGLES代码.如here所述,您似乎需要使用

glClearColor(0.0, 0.0, 0.0, 0.0);

代替

glClearColor(1.0, 1.0, 1.0, 0.0);

我还使用了CGBitmapInfo的kCGImageAlphaPremultipliedLast值.

完成所有这些操作后,无需调用CGImageCreateWithMaskingColors,并且在调用UIImagePNGRepresentation时,生成的图像似乎正确保留了alpha通道.

点赞