[iPhone] 画像をぼかし・モザイク化する2つの方法

画像をぼかす、モザイク化するにはどうすればいいでしょうか。UIGraphicsBeginImageContextを使ったやり方やCALayerでラスタライズする方法もあります。

 

Swift 4.0
Xcode 9.2

 

ぼかし・モザイク化

 
画像を拡大縮小するときに使う補間やラスタライズなどを逆手にとるとモザイクのほうなボケた画像が作り出せます。これを作り出すために
UIGraphicsBeginImageContext, UIGraphicsEndImageContext
を使う方法とCALayerを使うやり方があります。
 
例えば、このような画像をモザイク化してみたいと思いますので、画像をAssetsに入れます。
 

 

 

UIGraphicsBeginImageContext

 
補間:
例えば画像を100x100pixから200x200pixに拡大するときに、足りない情報が出てきます
座標の[0,0] [1,1] ….
拡大 [0,0] [1,1] [2,2] …
元の[1,1]の画像データは拡大後に[2,2]として使えますが[1,1]の画像ピクセル情報が足りない。このときに補間という作業を行います。とても単純な例では元の[0,0] と [1,1] の両方を合計して平均を出して中間データとするのです。
画像は連続性がある程度あるので、なんとなく違和感の少ない画像を作り出せます。

モザイク画像は、逆にこの補間を一切やらないということで実現できます。

以下の例は、画像を1/10縮小してそれを元に戻す、つまり拡大ですが、ここで補間させないでそのまま拡大します。
 
ViewController.swift

 
このようながぞうになりました。
 

 

CALayer

 
CALayerを使いラスタライズ化を設定します。これはベクター形式などの画像データをBMPのようなピクセル、ドットに置き換えることです。

imgView.layer.shouldRasterize = true;
ラスタライズのスケールを設定します。
imgView.layer.rasterizationScale = 0.1;

これで、それなりの画像のぼけを出せます。

ViewController.swift

 
CALayerを使う方は画質は多少異なりますが、コード量は少ないです。
 

 
ちなみに、imgView.layer.rasterizationScaleを0.1にしましたが1.0でやれば綺麗な元の画像になります。
 
 
関連ページ:

 
References:
UIGraphicsBeginImageContext(_:) – UIKit | Apple Developer Documentation
shouldRasterize – CALayer | Apple Developer Documentation

誤字脱字、意味不明などのご意見は 謙: e-mail まで
ブックマークしておくと便利です このエントリーをはてなブックマークに追加
Twitter:




ページのトップへ戻る

シェアする

  • このエントリーをはてなブックマークに追加

フォローする