2017-05-08 29 views
0

カラーマスクを使用すると、JPGイメージのみが透明になります。なぜなら、カラーマスクはJPGでしか動作しないからです。SWIFT 3 - CGImage to 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

おかげで、私の他の質問SWIFT 3 - CGImage copy always nilでDonMagの問題は、ここではこれを解決するためのコードは次のとおりです。

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) 

    } 

}