【Mac】外部アプリを使わずにモザイクをかける方法

Mac

こんにちは、しきゆらです。

今回は、(ほぼ)外部からアプリをインストールせずにデフォルトで入っているアプリだけで画像にモザイク・ぼかしをかける方法をメモしておきます。
念のために書いておくと、画像編集専用のアプリを使わずにモザイクをかける、ということを目指しているのがこの記事。
こまこまとたくさんのアプリを入れたくない!という人は是非。

今回は、以下のサイトを参考にコードを修正したりしています。

macで画像加工はプレビュー.appで決まり!文字の回転やぼかし(ガウス)加工の方法 | mac野郎なのか

http://fanblogs.jp/macyarounanoka/archive/268/0#clipboard-image-gaussian-blur


 

準備

今回使うのは、Xcode。
入っていない場合は、AppStoreからダウンロードしてください。

Xcodeを開いたら、「Get started with a playground」もしくは「File > New > Playground」を選択。

すると、このような画面が出ます。
macOSが選択されていることを確認し、Blankを選択します。
保存場所や名前は適宜わかりやすく決めてください。

エディタが開いたら、以下のコードをコピー&ペースト。

let mosaicScale = 10.0;
let pbCopy = true;
 
import Cocoa
import CoreImage
let pb = NSPasteboard.general;
let readData = pb.data(forType: NSPasteboard.PasteboardType.tiff)
 
if(readData == nil){
   print("クリップボードへ写真・画像をコピーしてください")
   exit(1)
}
 
var clipboardImage = CIImage(data: readData!)
let nsimage = NSImage(data: readData!)

let filter = CIFilter(name: "CIGaussianBlur")
filter?.setDefaults()
filter?.setValue(clipboardImage, forKey: "inputImage")
filter?.setValue(mosaicScale, forKey: "inputRadius")

let outputImage = filter?.outputImage
let cropRect = CGRect(origin: CGPoint(x: 0, y: 0), size: clipboardImage!.extent.size)
let bmImg = NSBitmapImageRep(ciImage: outputImage!.cropped(to: cropRect))

if(pbCopy){
   pb.clearContents()
   pb.setData(bmImg.tiffRepresentation!, forType: NSPasteboard.PasteboardType.tiff)
   print("変換は終わり")
}

これにて準備完了。
では、実際に使ってみましょう。

 

画像にモザイク・ぼかしをかけてみる

まずは、Previewにて画像を表示します。
例として、ここでは以下の画像を使っていきます。

モザイク・ぼかしをかけたいところを選択します。
範囲を選択したら、⌘+cか「編集 > コピー」でクリップボードにコピーします。

Xcodeの右上にあるボタンを押して、処理のコンソールを開きます。

Xcodeの左下のボタンをクリック。

コンソールに「変換は終わり」と出たら処理は完了です。

 

最後に、Previewに戻って⌘+vか「編集 > ペースト」をします。
すると、以下のようになるはず。

あとは、モザイク・ぼかしがかかっている部分を適宜移動させると完了です。

 

コードの簡単な解説

上記にあるコードは、クリップボードにある画像に対してぼかしをかけるコードになっています。

「mosaicScale」の値を調節すると、ぼかしの強さを変更できます。
値を大きくすると、ぼかしが強くなります。
適宜調整してください。

まとめ

今回は、画像編集専用のアプリを使わずに画像にモザイク・ぼかしをかける方法でした。
たまにしか使わないものでアプリをたくさん入れたくない!という人の参考になれば幸いです。

今回は、ここまで。

おわり

Mac

Posted by shikiyura