1

我的形象

图片下载链接: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示例

4

1 回答 1

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 错误。我认为即使您提交错误报告,它也不会被修复。你可以尝试看看会发生什么。

于 2021-03-05T03:52:51.230 回答