このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング第60回

カメラで撮影した画像を内蔵フィルターで加工

数え切れないほどあるCore Imageのフィルターを使ったプログラミング

2017年11月20日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回から、内蔵カメラへのアクセス機能を利用したプログラムを書き始めています。この機能は、iOS 11に対応したSwift Playgroundsの最新版1.6で利用可能になったものでした。

 前回は、とりあえずiPadの内蔵カメラにアクセスして画面にカメラの映像が表示されることを確かめ、さらに標準アプリと同様の操作で写真が撮影できるところまでを確認しました。となると、次は撮影した写真を保存したいと考えるのが人情というものでしょう。しかし、そこには1つの障害が待ち受けていることに気づきました。それは、iOS上で動作するアプリから、iOSのさまざまなリソースに対してアクセスすることを許可する仕組みによるものです。

 実は、Swift Playgroundsの1.6でカメラが利用可能になったのも、そのカメラというリソースにアクセスする許可をユーザーに尋ねるための設定が、デフォルトで有効になったからでした。前回のプログラムを起動すると、ダイアログが表示されて「"(プログラム名)"がカメラへのアクセスを求めています」と聞いてきたのがそれです。このようなダイアログを表示するためには、アプリごとに設定が必要ですが、プレイグラウンド上で動くプログラムは独立した「アプリ」ではないので、その設定が自分ではできないのです。カメラの利用は例外的なもので、Swift Playgroundsが特別に用意してくれた設定と考えられます。

 撮影した写真をライブラリに保存するのにも、それと同様の許可の設定が必要になります。残念ながら、今のところSwift Playgroundsは、そのためのバイパス機能を用意してくれていません。別の方法で、写真をiPad内のどこかしらに保存することも不可能ではないかもしれませんが、そのための苦労に見合った成果は得られないかもしれません。

 今回は、それに挑戦するのではなく、まったく別の視点で撮った写真を利用する方法を考えてみました。iOSの伝統的な機能、Core Imageを使って、写真をフィルター加工してみようというものです。

数えきれないほどの種類が用意されているCore Imageのフィルター

 ソフトウェアの「フィルター」という用語にはなじみのない人もいるかもしれません。これは例えばコーヒー用など、一般的なフィルターのように何かを濾過するのではなく、入力されたデータに、あらかじめ指定された加工を加え、結果のデータを出力する一種の変換器です。入力が画像データの場合は、色の調整、変形などを加えて、元の画像とは見栄えが異なる画像に変換して出力します。もちろんソフトウェアによるフィルターなので、「加工」の種類としては、ありとあらゆるものが、アイディアと技術しだいで無限に考えられます。有名な写真編集アプリであるPhotoshopのフィルター機能は特に名高いので、その名前を聞くと、ああそのことか、と思い当たる人も多いでしょう。

 そのような画像加工のフィルターをゼロから作るには、画像処理に関する専門的知識やスキルが必要で、プログラミングの難度は高くなっています。ところがiOSには、Core Imageと呼ばれる高度な画像処理機能が備わっていて、その中にはフィルター機能も用意されています。これを利用すれば、驚くほど簡単に、多彩な画像処理を加えることが可能となります。もちろんプレイグラウンド上のプログラムからも難なく利用できます。

 このCore Imageフィルターの種類は非常に多く、ここでいちいち挙げて説明していくと、それだけで今回の記事が終わってしまうどころか、次回以降もしばらく説明を続けなければならないほどです。それでもざっと全体構成だけを説明しておきましょう。フィルターは、ぼかし、カラー調整、カラー効果など、まず14種類のカテゴリーに分かれています。そして、それぞれのカテゴリーの中に数種類から十数種類のフィルターが含まれています。実際の詳しい解説は、アップルの公式ドキュメント「Core Image Filter Reference」を参照してください。

カメラで撮影した写真をその場で加工して表示できるCore Imageフィルターには、非常に多くの種類がそろっています。それらは14のカテゴリーに分かれ、使用前後の画像付きで詳しく解説されています

 今回は、この中から、簡単に使えて効果もはっきりしているCICategoryStylizeカテゴリーにあるCIComicEffectを使ってみることにします。先頭のCIはCore Imageを表す接頭辞なので、Core Imageに含まれるすべてのフィルターに付いています。それを除くと、実質的な名前は、「Comic Effect」(マンガ効果)ということになります。これはマンガのように、輪郭と塗りつぶしで構成されたような絵を、元の写真から生み出すものです。

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!