【问题标题】:Heif with alpha channel not right in ios带有 alpha 通道的 Heif 在 ios 中不正确
【发布时间】:2021-03-05 11:52:51
【问题描述】:

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

【问题讨论】:

    标签: alpha heif


    【解决方案1】:

    我遇到了完全相同的问题。看起来如果图像以预乘 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 错误。我认为即使您提交错误报告,它也不会被修复。您可以尝试看看会发生什么。

    【讨论】:

      猜你喜欢
      • 2011-08-19
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多