Heif与alpha通道在ios中不对

时间:2018-01-15 12:57:29

标签: alpha heif

my image

图片下载链接:https://tbgw.alicdn.com/tps/TB1ZKLuQFXXXXbJXXXXXXXXXXXX-264-57.png_.heic

在ios中使用此图片时,Alpha通道不正确。

我的代码

    NSString *urlString = @"https://tbgw.alicdn.com/tps/TB1ZKLuQFXXXXbJXXXXXXXXXXXX-264-57.png_.heic";
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];

UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = image;
imageView.frame = CGRectMake(10, 100, 390, 100);
[self.view addSubview:imageView];

ios sample

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。看起来如果图像以预乘 alpha 模式保存,它将以直接 alpha 模式加载。被 UIImageView 渲染后,alpha 通道会被破坏。解决方法是重新加载图像,如果它是 heif:

var fixedImage = image
// Reload image if it is heif
if let utType = image.cgImage?.utType as String?, utType == "public.heic" {
    if let data = image.pngData() {
        if let reloaded = UIImage(data: data) {
            fixedImage = reloaded
        }
    }
}
imageView.image = fixedImage

即使您通过将其编码为无损 heif(通过将质量设置为 1.0)重新加载,它也能正常工作。

这绝对是一个iOS错误。即使您提交错误报告,我也不认为它会被修复。不过你可以试试看会发生什么。