[Swift5] CIFilterのCIRandomGeneratorでランダム画像を生成

By | 2019年4月29日

CIFilter(CoreImageFilter)を使うと、画像に様々なフィルタ効果をつけることができます。また、ある模様の画像を新しく生成できるフィルタも存在します。

最も簡単な画像生成フィルタの使用例として、引数を必要としないフィルタである CIRandomGenerator を紹介します。これは、各ピクセルの値(色)がランダムである画像を生成します。

CIRandomGeneratorの使用例

IKImageView に生成したランダム画像を設定する関数です。以下のコード内の IKImageView のインスタンス名は imageView です。

    // CIRandomGeneratorで指定した大きさの画像を生成する関数
    func generateRandomImage(size: CGFloat) {

        // フィルタの種類を指定
        let filter = CIFilter(name: "CIRandomGenerator")

        if let output = filter?.outputImage {
            // トリミングしてCGImageを作成
            let newCGImage = CIContext().createCGImage(output, from: 
                        CGRect(x: CGFloat.random(in: 0...1024), y: CGFloat.random(in: 0...1024), width: size, height: size))
            // 生成された画像を IKImageView に設定
            imageView.setImage(newCGImage, imageProperties: nil)
        }  
    }

この関数を任意の位置で、生成したい画像のサイズを引数として渡して実行してください。

CIFilter で出力される画像の形式は CIImage です。今回はこれを IKImageView で表示できる形式である CGImage に変換しています。また CIRandomGenerator によって出力される画像は大きさが無限大なので、そこからランダムにトリミングして指定したサイズの画像としています。

結果、以下のような画像が出力されます。

CIRandomGeneratorで出力された画像をIKImageViewで表示

これをファイル(png)として出力したものが以下の画像です。

CIRandomGeneratorで生成されたランダムな色の画像

以上が CIRandomGenerator でランダム画像を生成するコードのサンプルです。

この他にも市松模様や拡散光のエフェクトなどの画像生成フィルタが存在します。使用できるフィルタの一覧は以下のドキュメントに記載されています。

Core Image Filter Reference

コメントを残す

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