~ 開発後記

この記事は、開発者の個人的感想が綴られたものです。興味のある方だけお読みください。


世間はiPhone6やiOS8の話題でもちきりの中、やっと新しいアプリをリリースできました。
正直このアプリは予想以上に難しかったです。途中で開発機のMacが壊れるというハプニングがあったり、他にもいろいろやりながらですが、思いついてからリリースするまでに半年以上かかってしまいました。

最初のきっかけは単純なものでした。私自身あんまりSNSへの投稿等はしないのですが、送りたい写真があって、その写真の一部を外に見せたくなかったので、その部分を簡単にぼかせるアプリを探していました。

すっかりアプリが充実しているiPhoneですから、無料で簡単にぼかせるアプリなんてすぐ見つかるだろう。ついでに撮影日時とかGPS情報も削除できるといいなと思って探してみたところ・・・
ぼかし処理の使い勝手が悪くてイメージ通りにぼかせないとか、ぼかし編集中にいきなり全面広告が出てきて邪魔されるとか、ブラシ形状とかパターン選択とか機能豊富でなんでもできるんだけど、どうやったらぼかしができるのかよくわからないとか、編集した画像を保存してみたら元々より小さいサイズにリサイズされ、ぼかしてない部分の画質が悪くなっているとか、あと撮影日時やGPS情報は一応削除されてるんだけど、元々どんな情報が入っていてどんな情報を削除したのかちっともわからないとか、そんなものばかりでした。

えっ、こんなものなの? じゃあ、自分で作っちゃおうかな~。指でなぞったところをぼかすだけだったら簡単じゃない?あと撮影日時やGPS情報等のExif情報も確認して削除できるようにしよう。これくらいなら早くて1カ月でリリースできるかな?
と甘い考えで始めたのが今回の開発でした・・・

で、とりあえずiPhoneのスクリーンショットを指でなぞってぼかす処理は、数日でできました。おっ、これならすぐできそうと思って次はiPhoneのカメラで撮影した写真をぼかそうとしたところ・・・。メモリを食い過ぎて、アプリが落ちるどころか端末が突然リセットする事態となりました。

ここで初めてこの手のアプリの難しさを知りました。iPhoneの写真が800万画素だから1画素4バイトで32Mバイトのデータ。これをタッチと同時にリアルタイムでぼかし処理して更新してたらiPhoneじゃ性能が持たない。だからみんな画質を落として編集しているんだなとわかりました。みなさん、「こんなものなの?」なんて言ってすみません。

なら、実際の画像と別に表示用の画像を前に置いて、タッチ中はその表示用画像をぼかし処理し、実際の画像はバックグラウンドでぼかせばいいんじゃない?って、また軽く考えて2重レイヤ構造で実装を始めたところ処理が数倍難しくなりました(>_<)。バックグラウンドで処理するにしても、一度に1Mピクセル以上のイメージ処理をするとメモリ不足で動作不安定になるので、なぞった領域を1Mピクセル面積で分解して少しずつぼかすようにしています。この適切なサイズを求めるのに2次元方程式を解きながら処理したりして、毎日数学の図形の問題を解いて、100点取るまで居残り補習の連続という感じでした。そんな感じで2カ月くらいかけてやっと満足いくチューニングができましたが、ちょっと疲れてしまい、この開発はしばらく寝かせていました。

その後、ふと思いついて、ぼかし処理する時にタッチ開始時の色を少し加えたら、消せる感じになるんじゃないの?と思ってやってみたところ、いい感じで消せるので名前を「フォト消しゴム」にして、仕上げをしました。
仕上げというか、やるべき機能はたくさん残っていてUndo/Redo機能、タッチしたポイントでポップアップするメニュー、リサイズ機能、トリミング機能、Exif情報表示/編集機能、チュートリアル等々、結局それらだけでも2カ月はかかりました。他にもやりたいことはあったんですが、次期回しの予定にして、なんとかiPhone6発表の1週間前にAppleにレビュー申請しました。でも、この時期はやはり申請が殺到するようで、本日やっとAppleにレビューしてもらってリリースできました。(レビュー依頼から10日かかりました。)

結局、画像を送付する時にプライバシー情報がないか確認して消したいだけなのに、まぁいろいろ苦労してます。水鳥が水面上をすいすい気持ちよく泳いでいるように見えるのに水中では必死でバランスをとりながら水を掻いている感じです。

まぁ、そんなことは気にせず、編集とかぼかしとかしなくていいので、画像をどこかに送付する時には、ぜひ「Photo消しゴム」を通してプライバシー情報を確認してくださいね!

【Exif確認】写真情報が元の値と変わって保存されてしまうものがあります。元の値をそのまま保存しないのはなぜですか?

update

上の写真の矢印で示されているように、写真情報の一部の項目は元の値が打ち消し線で消されていて、新しい値が設定されているものがあります。これらの項目は、スイッチをONにして送信すると、新しい値に更新して画像を送信します(スイッチがOFFの場合はもちろん項目削除します。)。

以下の6種類の情報が、新しい値に更新される項目です。

  • ファイル変更日時
    →今回のファイル送信日時に変更します。
  • ソフトウェア
    →「Photo Rubber (バージョン番号)」に変更します。
  •  画像方向
    →画像方向が「標準」以外の場合、「標準」に変更します。
  • 画像サイズ
  • 被写体領域
  • 被写体位置
    →上記の3項目は、画像方向を変更したり、トリミングやリサイズで画像サイズを変えた時に、連動して変更します。

これらの情報は、Exif規格(デジタルスチルカメラ用画像ファイルフォーマット規格)で、アプリが画像を保存する際に更新して記録することが望ましいとされている項目です。Photo消しゴムは、この規格を尊重し、値を更新して保存しています。

実は、一部の画像処理アプリは、「画像方向」の項目を正しく認識せず、誤った方向に画像を表示してしまうものがあります。このようなアプリを使いたいのに正しく画像が表示されなくて困っている場合、Photo消しゴムを通せば、画像方向が「標準」に更新され、正しい方向に画像が表示されるようになります。なお、「画像方向」の項目は削除可能項目で、この項目が存在しない場合は「標準」が設定されているとみなすことになっています。したがって、Photo消しゴムで「画像方向」の項目を消してしまっても問題ありません。Photo消しゴムは、「画像方向」の項目を削除(または「標準」に更新)する替わりに、画像イメージを元の正しい方向に回転させて保存します。これに連動して画像サイズや被写体領域の座標もきちんと補正します。

【Exif確認】削除できる写真情報を全て削除して、写真ライブラリに保存したのに「撮影シーンタイプ」という情報が削除されないように見えるのですが、なぜですか?

scene

削除できる写真情報を全て削除して、写真ライブラリに一旦保存した後、Photo消しゴムで再読み込みして写真情報を確認すると、上の写真の矢印にある通り「撮影シーンタイプ」という情報が削除されずに残っているように見えます。

これは、Photo消しゴムが削除を忘れたのではなく、削除した写真を保存する際、写真ライブラリが自動的に「撮影シーンタイプ」の情報を付け加えて保存しているためです。写真ライブラリへの保存ではなく、メールや他のアプリに送信した場合は、「撮影シーンタイプ」の情報は削除して届いていることを確認しています。安心してお使いください。

画像によっては、「Exifバージョン」や「コンポーネント構成」等の必須情報がもともと存在していない画像があり、Photo消しゴムはそのまま必須項目が存在しない状態を維持しますが、一旦写真ライブラリに保存したものを確認すると、やはりその項目が追加されている場合があります。これも、写真ライブラリが自動的に項目を追加しているためです。このように、アプリによっては、勝手に項目を書き加えるものがあります。その場合でも、アプリの送信機能でPhoto消しゴムに直接写真を渡すことができれば、Photo消しゴムで写真情報の格納状況をきちんと目で見ることができます。ぜひご活用ください。

【Exif確認】写真情報の中でスイッチが薄く表示されてOFFにできないものがあります。これは削除できないのですか?

disable

上の写真の矢印で示されているように、写真情報(Exif情報)一覧の中にスイッチが薄く表示されている項目があります。これは削除できない項目なので、OFFにできません。

以下の6種類の情報が削除できない項目になります。

  • 解像度
  • 色空間情報
  • コンポーネント構成
  • 画像サイズ
  • Exifバージョン
  • 対応Flashpixバージョン


これらの情報は、Exif規格(デジタルカメラ用画像ファイルフォーマット規格)で「必須」と規定されているため、Photo消しゴムは削除せず維持しようとします。

なお、画像によってはこれらの必須情報の一部がもともと欠けている場合があります。Photo消しゴムは必須情報が存在しない場合、特に情報を追加せず、そのまま存在しない状態を維持します。しかし、写真ライブラリに一旦保存した後、再度その写真を開いてみると必須情報が加えられていることがあります。これは、Photo消しゴムが付与したのではなく、写真ライブラリが自動的に必須情報を書き加えているためです。詳しくはこちらをご覧ください。

【ぼかし機能】大きな画像をぼかしていると、突然黒塗りになることがあるのはなぜですか?

Screenshot 2014.09.07 03.19.02

上の写真のように、4000×3000ピクセルの大きな画像でぼかし処理をしようとすると、指でなぞった跡がぼかしにならず、黒く塗りつぶされる現象を確認しています。
画像処理の過負荷がきっかけでぼかし処理ライブラリが誤動作していると推測されますが、現在詳しい原因を追求できておらず、アプリ側で有効な対策が打てていません。
実際、この現象が発生するような大きな画像では、ぼかし処理自体のレスポンスが大変悪く、とてもストレスを感じる状況での編集になります。
お手数ですが、このような現象が発生する場合は、あらかじめ送付先に適したサイズにリサイズして編集していただけますようお願いします。
メニュー上部のサイズ表示部分をタップすると、以下のようなメニューが出ますので、小さめのサイズを選択すると、以後はスムーズに編集できます。リサイズ処理もやり直し(Undo)できますので、どれくらい小さくするとどれくらいの画質や操作性になるか、いろいろ試すことができます。

 

Screenshot 2014.09.07 03.19.24

なお、この黒塗り現象が発生した場合は、一度アプリを再起動する必要があります。アプリを再起動するには、ホームボタンをダブルクリックしてマルチタスク画面を起動し、Photo消しゴムを削除(アプリ画面を上にフリック)してから、ホーム画面よりPhoto消しゴムのアイコンをタップしてください。

現在、この現象が確認されているのは、iPad2,iPhone4s,iPhone5です。おそらくiPhone5cおよびiPhone5より前にリリースされた機種でも同様の現象が発生すると考えられます。iPhone5s,iPad Airは、処理能力が高いため、4000×3000ピクセルでもこの現象は見られません。また、iPhone5sのカメラ撮影サイズである3264×2448ピクセル以内であれば、いずれの機種でもこの現象の発生は見られません。デジカメ等で撮影したピクセルサイズの大きな画像をそのままiPhoneに転送して編集する際はご注意頂けますようお願いします。