[swift] UIImageをマスク用画像でマスキングする方法

目次

Swift4

Swift4では以下のコード

import UIKit

func maskImage(image: UIImage, maskImage: UIImage) -> UIImage {
 
 let maskRef: CGImage = maskImage.cgImage!
 let mask: CGImage = CGImage(
 maskWidth: maskRef.width,
 height: maskRef.height,
 bitsPerComponent: maskRef.bitsPerComponent,
 bitsPerPixel: maskRef.bitsPerPixel,
 bytesPerRow: maskRef.bytesPerRow,
 provider: maskRef.dataProvider!,
 decode: nil,
 shouldInterpolate: false)!;
 
 let maskedImageRef: CGImage = image.cgImage!.masking(mask)!
 let maskedImage:UIImage = UIImage(cgImage: maskedImageRef, scale: image.scale, orientation: image.imageOrientation)
 
 return maskedImage
}

 

Swift2.2

Swift2.2 では以下のコード

func maskImage(image: UIImage, maskImage: UIImage) -> UIImage {
    
    let maskRef: CGImageRef = maskImage.CGImage!
    let mask: CGImageRef = CGImageMaskCreate(
        CGImageGetWidth(maskRef),
        CGImageGetHeight(maskRef),
        CGImageGetBitsPerComponent(maskRef),
        CGImageGetBitsPerPixel(maskRef),
        CGImageGetBytesPerRow(maskRef),
        CGImageGetDataProvider(maskRef),
        nil,
        false)!;
    
    let maskedImageRef: CGImageRef = CGImageCreateWithMask(image.CGImage, mask)!;
    let maskedImage: UIImage = UIImage(CGImage: maskedImageRef);
    
    return maskedImage;
}

使い方:

let image = UIImage(named: "image.png")!
let mask = UIImage(named: "mask.png")!
let maskedImage = self.maskImage(image, maskImage: mask)
let imageView = UIImageView(image: maskedImage)
     
self.view.addSubview(imageView)

マスク用の画像は白黒が良い。
黒:残すところ
白:削るところ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です