LoginSignup
1
5

More than 5 years have passed since last update.

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

Posted at

概要

「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」をクリック。

スクリーンショット 2019-02-24 16.08.32.png

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

スクリーンショット 2019-02-24 16.09.00.png

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

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

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 の標準画像ビューワ「イメージ」で開いてみる。

ぼかし加工_01.jpg

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

ぼかし加工_02.jpg

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

スクリーンショット 2019-02-24 16.28.44.png

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

スクリーンショット 2019-02-24 16.33.03.png

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

ぼかし加工_03.jpg

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

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

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

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

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5