[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)
マスク用の画像は白黒が良い。
黒:残すところ
白:削るところ