【问题标题】:png transparent image metadata coming with white backgroundpng 透明图像元数据带有白色背景
【发布时间】:2021-03-28 19:30:53
【问题描述】:

元数据正在从 url 中提取 透明 png 图像。然而,UIImageView 以透明的形式出现并具有白色背景。

有解决这个问题的方法吗?

也许是 .pngData()

@IBOutlet weak var mainCenterIcon: UIImageView!

func initAudioPlayer() {
        
        let url = URL(string: activeAudioURL) 
        let playerItem:AVPlayerItem = AVPlayerItem(url: url!)
        player = AVPlayer(playerItem: playerItem)
        
        //MetaData to recieve album artwork
        let metadataList = playerItem.asset.metadata
        
        
        for item in metadataList {

            guard let key = item.commonKey?.rawValue, let value = item.value else{
                continue
            }

           switch key {
           case "artwork" where value is Data : mainCenterIcon.image = UIImage(data: value as! Data)
            default:
              continue
           }
        }
    }

【问题讨论】:

    标签: ios swift uiimageview png transparency


    【解决方案1】:

    我找到了解决办法:

    extension UIImage {
        func imageByMakingWhiteBackgroundTransparent() -> UIImage? {
    
            let image = UIImage(data: self.jpegData(compressionQuality: 1.0)!)!
            let rawImageRef: CGImage = image.cgImage!
    
            let colorMasking: [CGFloat] = [222, 255, 222, 255, 222, 255]
            UIGraphicsBeginImageContext(image.size);
    
            let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking)
            UIGraphicsGetCurrentContext()?.translateBy(x: 0.0,y: image.size.height)
            UIGraphicsGetCurrentContext()?.scaleBy(x: 1.0, y: -1.0)
            UIGraphicsGetCurrentContext()?.draw(maskedImageRef!, in: CGRect.init(x: 0, y: 0, width: image.size.width, height: image.size.height))
            let result = UIGraphicsGetImageFromCurrentImageContext();
            UIGraphicsEndImageContext();
            return result
    
        }
    
    }
    

    调用函数:

    mainCenterIcon.image = UIImage(data: value as! Data)
    mainCenterIcon.image = mainCenterIcon.image!.imageByMakingWhiteBackgroundTransparent()
    

    参考:Original Post

    【讨论】:

      【解决方案2】:

      您必须将图像背景设置为清除颜色并将不透明标志设置为 false。

      使用这两个:

      imageView.backgroudColor = UIColor.clear
      imageView.isOpaque = false
      

      【讨论】:

      • 这不起作用。白色背景仍然出现。
      • 据我所知并每天使用 PNG 是由 Xcode 管理的原生透明的。有时会发生一些 png 有一些问题需要强制他的背景处于透明模式。所以我认为你的PNG中有一些东西。看看这个imgur.com/a/CNqFGHP
      猜你喜欢
      • 1970-01-01
      • 2015-06-22
      • 2015-02-03
      • 2018-10-31
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-12
      • 1970-01-01
      相关资源
      最近更新 更多