Darkmodeに対応するために画像の背景を抜く

はじめに

だれのあしというクイズアプリをリリースしているのですが、クイズ画像の背景色が白になってしまっていました。現在問題が全部で60門あるので、1枚1枚手動で透過していくのは大変です。

そこでUIImageの特定の色を抜けないか調べてみました。

白抜き

白抜き前のコードと画像

白抜きを行なったことがわかりやすいように親ViewのBackgroudに色をつけています。

        let image = UIImage(named: "testImage")!
        imageView.image = image

白抜きを行うコードと画像

maskColorで定義している配列は、色を抜くRGBの色の間隔で以下の順に指定します[rMin, rMax, gMin, gMax, bMin, bMax]

今回は画像の白(255, 255, 255)だけを抜きたいので全てに255を指定しています。

        let image = UIImage(named: "testImage")?.cgImage
     
        let maskColor:[CGFloat] = [255, 255, 255, 255, 255, 255]
        let maskedImage = image?.copy(maskingColorComponents: maskColor)

        imageView.image = UIImage(cgImage: maskedImage!)

参考文献

特定の色を透明にする