【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」の値を調節すると、ぼかしの強さを変更できます。
値を大きくすると、ぼかしが強くなります。
適宜調整してください。
まとめ
今回は、画像編集専用のアプリを使わずに画像にモザイク・ぼかしをかける方法でした。
たまにしか使わないものでアプリをたくさん入れたくない!という人の参考になれば幸いです。
今回は、ここまで。
おわり
ディスカッション
コメント一覧
参考ソースありがとうございます。
恐らく他のソースコードからの流用時に含まれたかと思いますが、「pbCopy」という変数は、XCodeから直接処理を利用するのであれば不要な変数ですね。
コメントありがとうございます。
そうなのですね。
参考サイトをもとに、ソースコードは一部書き換えたりしてありますが、
XcodeやSwiftは今回ほぼはじめての状態だったので、
必要・不必要というものを正確に理解していない部分がありました。
ご指摘ありがとうございます。