他力本願で速攻でカメラアプリのアイデアを形にしてみました。

  • このエントリーをはてなブックマークに追加

iPhoneアプリでカメラアプリが作りたいなあ、と昨日唐突に思いました。

以前からやりたい、やりたいと思っていたのですが、カメラ関係はやったことなく、勉強するにも腰が重かったのですが、最近いろいろ相談も受けているのでちょこっとやってみることに。

プログラム関係については、個人ブログなどでソースコードを公開されている方が多くいらっしゃいます。
新しいことの勉強というと概念から理解して、となりがちですが、作っちゃってから概念や理論を覚えても良いのかと思っています。

ということで、今回は人様のブログを拝見(拝借)し、実際に自分で使いやすいソースコードの端々をいただいて簡易カメラアプリを作ってみました。(かけた時間は数時間です。)

THE囚人カメラです。
単なるカメラ合成アプリです。

ソースコードも掲載しますので、そのままコピペしていただければなんとなく簡単なカメラ合成アプリは作れると思います。
※Storyboardの使い方とか基本的なことは知っていることを前提にしていますので、そんなに親切ではありません。

アイデアは持っていても形にしなければ意味ありません。
作ったもの勝ちなんです。

0. まずは概念の理解より自分でカスタマイズしやすいソースコードを探す

これは自分だけかも知れませんが、とにかく作る!という目標があった場合、概念の理解ももちろん必要ですが、自分に要所要所が理解出来て変更を加えられるソースコードを探して概念や細かいことは後回しにするのが一番近道です。

たとえば、カメラアプリで使用するimagepickerとはなんぞや、みたいなところから入ると心が折れてしまいます。

とにかくコピペして実行してみてエラー出したり落としたりしながら、進めていきましょう。

1. カメラを起動する処理を作ります。

ちなみにカメラアプリは実機をつながないとエミュレータでは起動しませんでした。
(やり方あるのかも知れませんが、急いでいるので実機を繋いで出来る方法で最短で。)

●やりたいこと:

檻のイラストを表示しながらカメラ撮影をしたい。

●使わせていただいたサイト:

「iOS 5の顔検出機能とカメラを使ったiPhoneアプリを作る」
「カメラビューの上に画像を重畳する」

●実際のソースコード

このコードをボタンが押された時など任意のタイミングで実行します。
(とりあえず処理だけを掲載します。)

//カメラが利用できるか確認
if([UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {

UIImagePickerController *imagePickerController = [[UIImagePickerControlleralloc] init];

//カメラかライブラリからの読み込み指定。カメラを指定
[imagePickerController setSourceType:UIImagePickerControllerSourceTypeCamera];

//トリミングなどを行うか否か、今回は編集はしません。
[imagePickerController setAllowsEditing:NO];

//檻のイラストをカメラビューで確認しながら撮影します。
UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage     imageNamed:@”ori.png”]];
imageView.frame = CGRectMake(0, 0, 320, 480);
imagePickerController.cameraOverlayView = imageView;

//カメラの設定完了
[imagePickerController setDelegate:self];
//カメラビューを起動
[selfpresentViewController:imagePickerController animated:YEScompletion:nil];
}

とりあえずこれを実行するとこうなります。
ボタンが変なとこに出ていたりしますが、まずは放っておき次へいきます。
こういったカスタマイズは基本的なことができてからじっくり調べれば良いのです。

IMG_2024

 

 

 2. 撮影した写真に檻のイラストを合成する。

●やりたいこと:

撮影した写真に檻のイラストを合成してアルバムに保存したい。

●使わせていただいたサイト:

【画像を合成する】アプリ開発日記(7/2)
iPhoneアプリ開発の虎の巻
[iPhone]画像をカメラロールに保存する方法

●実際のコード

撮影した写真を決定する時に呼び出されるコードです。
写真と檻のイラストを合成してそのままアルバムへ保存します。プレビューなどは端折っています。

こういったユーザー配慮などについても、このアプリを仕上げる時にやれば良いでしょう。

  – (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

//撮影した写真を取得します
UIImage *originalImage = (UIImage *) [info objectForKey:UIImagePickerControllerOriginalImage];

//合成する素材を定義します。
UIImage *photo = originalImage;     //撮影した素材の変数
UIImage *ori = [UIImage imageNamed:@”ori.png”]; //合成する檻のイラストを入れる変数

//320×480で書き出します。(撮影した写真)
CGFloat photoWidth = 320;
CGFloat photoHeight = 480;

//檻のイラストはそのままのサイズで
CGFloat oriWidth = CGImageGetWidth(ori.CGImage);
CGFloat oriHeight = CGImageGetHeight(ori.CGImage);

//合成します。
UIGraphicsBeginImageContext(CGSizeMake(photoWidth, photoHeight));
[photo drawInRect:CGRectMake(0, 0, photoWidth, photoHeight)];
[ori drawInRect:CGRectMake(0, 0, oriWidth, oriHeight)];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

//編集した画像を保存します。
UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

// カメラUIを閉じます。
[selfdismissViewControllerAnimated:YEScompletion:nil];
}

//この処理がないと保存したときにアプリが落ちます。
– (void)image:(UIImage*)image didFinishSavingWithError:(NSError*)error contextInfo:(void*)contextInfo {

if(!error){
NSLog(@”success”);
}else{
NSLog(@”error”);
}
}

 

で、実行すると以下のような写真が保存されます。

IMG_2026

※当人に掲載許可とっています。当社のエースデザイナーです。
デザイン終わるまで帰れない感がすごいですね。

 

作ってみて重要だと思うこと。

とにかく実行してみる
プログラマーの性格は熱しやすく冷めやすいです。
鉄は熱いうちに打て、ではありませんが、とにかくやる気のある時に最短で形にする。

そのためには概念やディテイルは置いておいて、とにかくやりたいことの概略を形にしてみることが大事だと思います。
いったん動くものが出来ると、ディテイル調整やリリースするアプリとしての体裁を整えるモチベーションも上がってきます。

プログラムスキルより検索力
物事知っているより、検索をうまく使って人のコードを組み合わせる力っていうのは重要かと思います。

もちろん、ゼロベースで作れればそれに越したことはないのですが、私のような中途半端なスキルの人間にとっては検索力のほうが大事だったります。

====

この手のアプリはたくさんあると思います。
正直リリースはどうしようか迷ってます。。

 

執筆者:高本

株式会社8bit 取締役の高本です。 社内のWebサービス企画、プログラミングや、売上・請求管理にいたるまで幅広く担当しております。

関連記事

WordPress

WordPressの会員限定記事配信プラグイン「Simple Analytics」をリリースしました!

WordPressのイベントカレンダープラグイン「Simple Analytics」をリリースしました! ※この記事は2024年10月現在の情報です。 目次1 Simple Analyticsとは?2 こんなお悩みにおすすめです3 Simple Analyticsで できること3.1 月別・週別アクセス数3.1.1 確認できる項目3.2 ページ別アクセス数3.3 外部サイトからのアクセス数3.4 地域・デバイス別アクセス数3.5 時間帯別アクセス数3.6 ページ毎の直帰率3. […]

WordPress

WordPressの会員限定記事配信プラグイン「Limited Post Maker」をリリースしました!

WordPressのイベントカレンダープラグイン「Limited Post Maker」をリリースしました! ※この記事は2024年10月現在の情報です。 目次1 Limited Post Makerとは?2 どんなシーンで使える?3 Limited Post Makerで できること3.1 オウンドメディア、ブログの記事を会員のみに配信3.2 会員登録・ログインフォーム3.3 会員情報の管理4 使い方について5 システム要件6 導入のお問い合わせについて Limited P […]

WordPress

WordPressのフォームプラグイン「Easy Form Maker」をリリースしました!

WordPressのイベントカレンダープラグイン「Easy Form Maker」をリリースしました! ※この記事は2024年10月現在の情報です。 目次1 Easy Form Makerとは?2 どんなシーンで使える?3 Easy Form Makerで できること3.1 お問合せフォームを作成3.2 質問を自由に決めてアンケートフォームを作成3.3 Webサイトへの設置はショートコード1行3.4 問合せやアンケート結果をデータベースへ蓄積3.5 複数のフォームを設置するこ […]

株式会社8bit (エイトビット)

東京都目黒区でWebサイト制作、Webシステム開発などを行っております。
コーポレートサイトやWebサービスの企画・提案を得意としており、自社での経験を元にアイデアをカタチにするお手伝いをさせていただいております。

Web制作に関するご相談はお気軽にどうぞ

弊社に制作をご依頼いただく際の費用感をご確認いただける、
見積りシミュレーションをご用意いたしました。