2017-05-08 98 views
0

我想用顏色掩碼使JPG圖像中的顏色透明,因爲當我閱讀時,顏色掩碼只能用於JPG。SWIFT 3 - CGImage到PNG

此代碼適用於應用顏色遮罩並將圖像另存爲JPG格式,但作爲JPG,沒有透明度,因此我想將JPG圖像轉換爲PNG圖像以保持透明度,但是當我嘗試要做到這一點,顏色面具不起作用。

我做錯了什麼或者這可能不是正確的做法。

這裏的2個函數的代碼:

func callChangeColorByTransparent(_ sender: UIButton){ 

    var colorMasking: [CGFloat] = [] 
    if let textLabel = sender.titleLabel?.text { 

     switch textLabel { 
     case "Remove Black": 
      colorMasking = [0,30,0,30,0,30] 
      break 
     case "Remove Red": 
      colorMasking = [180,255,0,50,0,60] 
      break 
     default: 
      colorMasking = [222,255,222,255,222,255] 
     } 
    } 

    print(colorMasking) 

    let newImage = changeColorByTransparent(selectedImage, colorMasking: colorMasking) 
    symbolImageView.image = newImage 
} 


func changeColorByTransparent(_ image : UIImage, colorMasking : [CGFloat]) -> UIImage { 

    let rawImage: CGImage = (image.cgImage)! 

    //let colorMasking: [CGFloat] = [222,255,222,255,222,255] 

    UIGraphicsBeginImageContext(image.size) 

    let maskedImageRef: CGImage = rawImage.copy(maskingColorComponents: colorMasking)! 

    if let context = UIGraphicsGetCurrentContext() { 

     context.draw(maskedImageRef, in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) 

     var newImage = UIImage(cgImage: maskedImageRef, scale: image.scale, orientation: image.imageOrientation) 

     UIGraphicsEndImageContext() 

     var pngImage = UIImage(data: UIImagePNGRepresentation(newImage)!, scale: 1.0) 

     return pngImage! 
    } 

    print("fail") 
    return image 

} 

感謝你的幫助。

回答

0

感謝DonMag在我的其他問題SWIFT 3 - CGImage copy always nil的問題,這裏是解決這一代碼:

func saveImageWithAlpha(theImage: UIImage, destFile: URL) -> Void { 

    // odd but works... solution to image not saving with proper alpha channel 
    UIGraphicsBeginImageContext(theImage.size) 
    theImage.draw(at: CGPoint.zero) 
    let saveImage = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    if let img = saveImage, let data = UIImagePNGRepresentation(img) { 

     try? data.write(to: destFile) 

    } 

}