2017-05-23 2 views
0

J'utilise cette fonction que je trouve dans this post pour convertir une image couleur à un gris mis à l'échelle un:Comment mettre à l'échelle une image avec des pixels transparents rendant toutes les images opaques?

func grayScaleImage() -> UIImage { 
    let imageRect = CGRectMake(0, 0, self.size.width, self.size.height); 
    let colorSpace = CGColorSpaceCreateDeviceGray(); 

    let width = UInt(self.size.width) 
    let height = UInt(self.size.height) 
    let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros); 
    CGContextDrawImage(context, imageRect, self.CGImage!); 

    let imageRef = CGBitmapContextCreateImage(context); 
    let newImage = UIImage(CGImage: imageRef) 
    return newImage 
} 

J'ai fait quelques tests avec des images qui ont un fond transparent, et le résultat que je reçois est une image avec un fond noir. Je voudrais que les pixels transparents/translucides se comportent comme si l'arrière-plan de l'image était blanc, comment pourrais-je faire cela?

+0

Quelle version de Swift utilisez-vous? – DonMag

Répondre

0

Pour que la partie transparente de votre image soit blanche (ou de toute autre couleur), dessinez simplement un rectangle plein dans le contexte du dessin.

Swift 3:

extension UIImage { 
    func grayScaleImage() -> UIImage { 
     //let imageRect = CGRectMake(0, 0, self.size.width, self.size.height); 
     let imageRect = CGRect(origin: CGPoint.zero, size: self.size) 
     let colorSpace = CGColorSpaceCreateDeviceGray(); 

     let width = Int(self.size.width) 
     let height = Int(self.size.height) 

     let context = CGContext(data: nil, width: width, height: height, bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: .allZeros) 

     // set Fill Color to White (or some other color) 
     context?.setFillColor(UIColor.white.cgColor) 
     // Draw a white-filled rectangle before drawing your image 
     context?.fill(imageRect) 

     context?.draw(self.cgImage!, in: imageRect) 

     let imageRef = context?.makeImage() 
     let newImage = UIImage(cgImage: imageRef!) 
     return newImage 
    } 
} 

Swift 2.2:

extension UIImage { 
    func grayScaleImage() -> UIImage { 
     let imageRect = CGRectMake(0, 0, self.size.width, self.size.height); 
     let colorSpace = CGColorSpaceCreateDeviceGray(); 

     let width = Int(self.size.width) 
     let height = Int(self.size.height) 
     let context = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpace, .allZeros); 

     // set Fill Color to White (or some other color) 
     CGContextSetFillColorWithColor(context, UIColor.whiteColor().CGColor) 
     // Draw a white-filled rectangle before drawing your image 
     CGContextFillRect(context, imageRect) 

     CGContextDrawImage(context, imageRect, self.CGImage!); 

     let imageRef = CGBitmapContextCreateImage(context); 
     let newImage = UIImage(CGImage: imageRef!) 
     return newImage 
    } 
}