[英]png transparent image metadata coming with white background
元數據正在從 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
}
}
}
您必須將圖像背景設置為清除顏色並將不透明標志設置為 false。
使用這兩個:
imageView.backgroudColor = UIColor.clear
imageView.isOpaque = false
我找到了一個解決方案:
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
}
}
調用 function:
mainCenterIcon.image = UIImage(data: value as! Data)
mainCenterIcon.image = mainCenterIcon.image!.imageByMakingWhiteBackgroundTransparent()
參考: 原帖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.