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

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

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サービス企画、プログラミングや、売上・請求管理にいたるまで幅広く担当しております。

関連記事

プログラミング

【phpdotenv】PHPで環境変数を取り扱うお話

PHPでサーバーの環境ごとに設定ファイルを用意する場合、config.phpなどのファイルにデータベースの接続情報やAPIのキーなどをdefineで登録すると思います。 これは昔からある一般的なやり方ですが、例えば「ローカル環境やテスト環境と本番環境で情報を出し分けたい」「GitHubやSubversionなどに接続情報を管理されたくない」ということがあるかと思います。 Linuxの場合は「.env」でユーザーごとの情報をあらかじめ設定することが可能ですが、PHPだとデフォル […]

Webサービス

【CAPTCHA系】reCAPTCHAの代替サービスを紹介するお話

みなさん、reCAPTCHAを使ってますか? CAPTCHAと呼ばれる機能は問い合わせフォームやログインフォームなどいわゆるbot系対策として有効で、その中でもreCAPTCHAは無料かつ簡単に導入できるたため、様々な場所で使われてます。 目次1 2024年4月から実質有料化?2 他にないのだろうか?3 アカウントを作る4 PHPでの実装5 最後に 2024年4月から実質有料化? しかし、2024年4月から今まで100万リクエストまで無料だったのが、1アカウント合計1万リクエ […]

Webサイト制作

Webアクセシビリティの基本を学ぼう!

近年Webサイト制作時に求められる『Webアクセシビリティ』。 正直なんだかよくわからない、ややこしそうだなあと思う方も多いと思います。 自分も勉強中ではありますが、今回は対応しやすそうな内容をなるべくわかりやすくまとめてみました。 一緒にWebアクセシビリティについて学んでいきましょう。 目次1 そもそもWebアクセシビリティってなに?2 基本的な対応内容2.1 色のコントラストをはっきりさせよう2.2 文字サイズを変更できるようにしよう2.3 できるだけテキストベースを心 […]

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

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

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

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