我有一个接收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通道.