Xcode の Playground を使って Mac でぼかし画像を爆速で無料生成する方法

## 概要
「Mac でモザイクとかぼかしの画像を作りたいなぁ」「でも、ソフトをダウンロードしてインストールとかしたくない（or できない）なぁ」と思った時の対応策の備忘録。

Xcode を使って、`Command + C` 等でクリップボードにコピーされた画像を読み込んで、ぼかし加工を行い出力する方法。

## 前提

- OS： macOS Mojave (10.14.2)
- Xcode： Version 10.1 (10B61)

## 手順

### Xcode を起動し、ぼかし加工用プロジェクト作成

メニューから「File > New > Playground」を選択して、新規プロジェクト作成する。
Mac の PC 上で使うので、対象 OS は `macOS` にして、空（Blank）のプロジェクト「Next」をクリック。

<img width="1072" alt="スクリーンショット 2019-02-24 16.08.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/199602/bb3ab697-c7e4-fc9d-9b3b-afc4dcb7f268.png">

名前はなんでも良いが「ぼかし加工」とかにしちゃう。

<img width="1072" alt="スクリーンショット 2019-02-24 16.09.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/199602/c07e6f3b-10b9-429f-098e-d5aa6c785b9d.png">

### ぼかし加工を行うプログラムを書く

プレイグラウンドの編集画面が開いたら、以下のソースをそのまま貼り付ける（エラーは出ないはずですが、出たら自動 fix とかで随時対応してください）。

```swift
import Cocoa
import CoreImage

print("[START] クリップボードのイメージをぼかします")
// 変換処理補完ロジック：これが無いと, 変換がするが途中でエラー出力される場合がある
extension CIImage: CustomPlaygroundDisplayConvertible {
    static let playgroundRenderContext = CIContext()
    public var playgroundDescription: Any {
        let jpgData = CIImage.playgroundRenderContext.jpegRepresentation(of: self, colorSpace: CGColorSpace(name: CGColorSpace.sRGB)!, options: [:])!
        return NSImage(data: jpgData)!
    }
}

// ぼかしレベル: 初期値 10.0, 数値が大きいほどぼかし効果大.
let blurLevel = 10.0

// クリップボードから画像データ取得
let pasteboard = NSPasteboard.general;
let clipboardData = pasteboard.data(forType: NSPasteboard.PasteboardType.tiff)
if(clipboardData == nil){
    print("[WARN] Command + C でクリップボードへ画像をコピーしてください.")
    exit(1)
}
var sourceCiImage = CIImage(data: clipboardData!) // 変換前のCI画像

// ぼかし加工 実施
let filter = CIFilter(name: "CIGaussianBlur")
filter?.setDefaults()
filter?.setValue(sourceCiImage, forKey: "inputImage")
filter?.setValue(blurLevel, forKey: "inputRadius")
let outputImage = filter?.outputImage
let cropRect = CGRect(origin: CGPoint(x: 0, y: 0), size: sourceCiImage!.extent.size)
let blurredImage = NSBitmapImageRep(ciImage: outputImage!.cropped(to: cropRect)) // 変換後のCI画像

// クリップボードを一度クリアし, 変換後データをセット
pasteboard.clearContents();
pasteboard.setData(blurredImage.tiffRepresentation!, forType: NSPasteboard.PasteboardType.png)
print("[DONE] ぼかし完了. Command + V で任意の場所にペーストしてください.")

```

これで完了。
クリップボードのイメージを読み取り、ぼかして再度クリップボードにセットする処理が完成した。

## 確認してみる

適当な画像を Mac の標準画像ビューワ「イメージ」で開いてみる。

<img width="1362" alt="ぼかし加工_01.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/199602/e85ceeaa-e615-d3d4-1906-16ba02bc7f2e.jpeg">

ぼかしたい場所を範囲選択する（下図で、わかりにくいけど真ん中ら辺を四角くドラッグしている）
そして、クリップボードにコピー（ `Command + C` ）する

<img width="1362" alt="ぼかし加工_02.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/199602/ef7fd730-ed18-6cd4-49bc-7f4cc534998a.jpeg">

ぼかし加工のプログラムの方へ切り替え、コンソール出力を表示しておく（右上のタブバーアイコンをクリックで表示できる）

<img width="1072" alt="スクリーンショット 2019-02-24 16.28.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/199602/e870b0f0-1c73-a66d-6381-3a5430989647.png">

左下の「実行アイコン（▷）」をクリックして、ぼかし加工プログラムを実行させる。
成功すると、下記の様になる（Playground は、プレビューアイコンクリックで、下の様にソース内の特定の箇所にプレビュー表示ができる）。

<img width="1072" alt="スクリーンショット 2019-02-24 16.33.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/199602/11d784fe-83ec-6f49-7d2b-77f21ae66e49.png">

この状態で、「プレビュー」に戻り、 `Command + V` でペーストしてみると、以下の様になる。

<img width="1362" alt="ぼかし加工_03.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/199602/fae00750-802d-68ae-bd35-59aaffcdf178.jpeg">

ペーストイメージは、画像のど真ん中に配置されるので、適当に移動して重ねればOK。
無事、ぼかし画像の作成ができた。

これで、ネット上からぼかしツールとかを新たにインストールしなくても、「**コピー ▶︎ ぼかし加工 ▶︎ ペースト**」で簡単にぼかし加工ができる。

テキスト文字などの場合は、ぼかし画像の下のオリジナルが視認できる場合があるため、
一度対象箇所の背景色でオリジナルを完全に塗りつぶし、その上に ぼかし加工したイメージを貼り付けると良い。

（ただし、Xcode のバージョン更新でソースコードの書き方が変わる可能性はあるのでご注意）