2010年12月21日火曜日

シンプルなトイカメラアプリ Cmeramaticをリリースしました

新しいiOSアプリをリリースしたのでお知らせします。



Cameramatic




cameramaticはシンプルなiPhone/iPod touch向けのトイカメラアプリです。
難しい設定は一切不要で、付属しているフィルタとフレーム組み合わせると普通とはちょっと雰囲気の違う写真を簡単に撮影することが可能になっています。



screenshot02


cameramatic cameramatic20101206-01 cameramatic04 cameramatic03 cameramatic02 cameramatic01



Cameramatic
http://www.mudaimemo.com/iphone/cameramatic/

2010年12月18日土曜日

[iOS]画像にEXIFなどのメタデータを付加する方法メモ

iOS4になってから画像のEXIFを読み込んだり書き込んだりすることができるようになりました。

UIImagePickerを利用していればdelegateで呼ばれるメソッドの引数にメタデータが格納されています。
カメラロールに保存する場合は ALAssetsLibrary:writeImageToSavedPhotosAlbum:metadata:completionBlock:
を使えばメタデータも一緒に格納できます。(iOS4.1以上)


ただ、画像のメタデータを直接書き換える方法がよく分からなくてハマってしまいました。
検索してもめぼしい情報があまり見当たらず四苦八苦して実現したので一応メモしておきます。


#import <ImageIO/ImageIO.h>
#import <MobileCoreServices/UTCoreTypes.h>

- (NSData *)addMetadata:(UIImage *)image {
    NSMutableData *imageData = [[[NSMutableData alloc] init] autorelease];

    // メタデータ
    NSMutableDictionary *metadata = [NSMutableDictionary dictionary];

    // メタデータ: 画像の高さと幅
    [metadata setObject:[NSNumber numberWithInt:1000]
                 forKey:(NSString *)kCGImagePropertyPixelHeight];
    [metadata setObject:[NSNumber numberWithInt:1000]
                 forKey:(NSString *)kCGImagePropertyPixelWidth];

    // メタデータ: Exif
    NSMutableDictionary *exif = [NSMutableDictionary dictionary];
    exif = [metadata objectForKey:(NSString *)kCGImagePropertyExifDictionary];
    [exif setObject:@"ユーザーコメント" forKey:(NSString *)kCGImagePropertyExifUserComment];
    [metadata setObject:exif forKey:(NSString *)kCGImagePropertyExifDictionary];


    // CGImageDestination を利用して画像とメタデータをひ関連付ける
    CGImageDestinationRef dest;
    dest = CGImageDestinationCreateWithData((CFMutableDataRef)imageData, kUTTypeJPEG, 1, nil);

    CGImageDestinationAddImage(dest, image.CGImage, (CFDictionaryRef)metadata);
    CGImageDestinationFinalize(dest);
    CFRelease(dest);

    return imageData;
}

2010年11月28日日曜日

[iOS] UIViewControllerのdeallocが呼ばれなくてハマった

ふとしたきっかけでdeallocが呼ばれないUIViewControllerのサブクラスができてハマってしまいました。
小ネタですがメモしておきます。

[self.navigationController popViewControllerAnimated:YES];

popViewControllerAnimated:の裏側では popされたViewControllerがreleaseされてdeallocが呼ばれるはずです。

ところが

下のような構成のViewContorllerではpopされてもdeallocメソッドが呼ばれませんでした。
UITableViewControllerを使わずに、素のUIViewControllerのUIViewにUITableViewを埋め込もうとしています。
UIViewControllerとTableViwe間でやりとりをするために、お互いに相手のpropertyを持たせています。

@interface MyTableView : UITableView 
{
    MyViewController *myViewController;
}

@property (nonatomic, retain) MyViewController *myViewController;

@end

@interface MyViewController : UIViewController
{
    MyTableView *myTableView;
}

@property (nonatomic, retain) MyTableView *myTableView;

@end


@implement MyViewController

@synthesize myTableView;

- (void)loadView {
    [super loadView];

    self.myTableView = [[MyTableView alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];
    myTableView.myViewController = self;
    [self.view addSubview:myTableView];
}

- (void)dealloc { // なぜかこれが呼ばれない
    [myTableView release];
    [super dealloc];
}

@end
どうも
myTableView.myViewController = self;
このようにpropertyのpropertyにselfを指定してしまうとdeallocが呼ばれなくなるようです。

対処法としてはselfを指定しているpropertyにnilをセットすること。
- (void)viewDidDisappear:(BOOL)animated {
    [super viewDidAppear:animated];

    if (self.parentViewController == nil) { // popされた時のみ実行される
        myTableView.myViewController = nil;
    }
}


delegateパターンでも同じようにnilをセットしてやる必要があるので注意です。




[2011/02/15 追記]

上のと似たような事例ですがまたdeallocが呼ばれない現象が発生したのでメモしておきます。
// NSArrayのプロパティにselfを格納する
self.dataSourceArray = [NSArray arrayWithObjects:self, obj1, obj2, nil];
NSArrayに(NSDictionaryも)値を入れるとその時点でretainCountがひとつ増えます。
なので上の事例と同じように、例えばviewDidDisappearなどで
dataSourceArray = nil;
としてやる必要があります。

2010年11月25日木曜日

Facebookのアカウントを使ってOAuth認証するメモ

Facebookのユーザーが日本でも増えてるらしいのでFacebookのAPIを使って何かできたらなと思い、とりあえず認証の仕組みを調べてみたのでざっくりとしたメモを残しておきます。

基本的にWebアプリの話です。
iOSアプリの場合はiOS用のSDKをごにょごにょすればあんまり難しいことを考えずにすみます。



なにはともあれ、ドキュメントはこちら

Authentication - Facebook Developers
http://developers.facebook.com/docs/authentication/



Facebookの認証はWebアプリでもデスクトップアプリでもOAuth2.0を利用しています。
Twitterの認証もOAuthなのですが、TwitterのほうはOAuth1.0なので仕様が異なります。

また、Twitterの認証は 「認証即全権限付与」という感じなのですが
Facebookでは パーミッションの付与 ->  認証 という流れになっています。

デフォルトではユーザーのプロフィール情報などのみ取得できます。
メールを送信したり写真/ビデオを扱うためには別途パーミッションをリクエストする必要があります。



以上を踏まえた上で、実際に認証するコードが下のようになります。
facebookが用意しているPython用のコードから一部抜き出しています。

# アプリの設定ページでApplication ID, Application Secretを確認しておく
# http://www.facebook.com/developers/apps.php
FACEBOOK_APP_ID = 'app_id'
FACEBOOK_APP_SECRET = 'app_secret'

class LoginHandler(BaseHandler):
  def get(self):
    verification_code = self.request.get("code")
    args = dict(client_id=FACEBOOK_APP_ID, redirect_uri=self.request.path_url)

    if self.request.get("code"):
      # authorizedされたらcodeが飛んでくる
      # そのcodeを利用してaccess_tokenを取得するリクエストを投げる

      args["client_secret"] = FACEBOOK_APP_SECRET
      args["code"] = self.request.get("code")
      content = urllib.urlopen(
                  "https://graph.facebook.com/oauth/access_token?" +
                  urllib.urlencode(args)).read()

      # access_token=***&expires=*** というクエリストリング形式の文字列が返ってくるのでパースする
      response = cgi.parse_qs(content)
      access_token = response["access_token"][-1]

      # access_tokenがゲットできたらプロフィール情報も取得できる
      profile = json.load(urllib.urlopen(
                  "https://graph.facebook.com/me?" +
                  urllib.urlencode(dict(access_token=access_token))))

      self.redirect("/")
    else:
      # 認証用のコードがなければauthorizeへリダイレクト (パーミッションの確認)
      self.redirect(
        "https://graph.facebook.com/oauth/authorize?" +
        urllib.urlencode(args))
その他、Cookieを仕込んだりaccess_tokenやプロフィール情報をストレージに格納したりログアウト処理の実装は割愛
PHP用のコードもfacebookが用意してくれているので必要な方はそちらをどうぞ。

access_tokenがあってパーミッションが与えられていればGraph APIの各メソッドを実行することが可能です。


FacebookはなんとJavaScript用のSDKまで用意していて、これを使えばJavaScriptオンリーで認証やGraph APIの利用が可能になっています。



[2011/02/03 追記]

OAuth 2.0の概要やOAuth 1.0とOAuth 2.0の違いなどは下の記事が参考になります。
OAuth 2.0でWebサービスの利用方法はどう変わるか

2010年8月21日土曜日

iPhone ScreenTaker - iPhone/iPad本体込みのスクリーンショットを作成できるアプリ

今更感ありありですが最近お世話になったのでご紹介。
アプリやWebサイトを紹介する時にとても重宝します。


iPhone ScreenTaker ※ Mac限定

http://fabian-kreiser.com/

ダウンロードは上のリンクの「DOWNLOADS」 → 「IPHONE SCREENT.」



左側のスペースに用意したスクリーンショットをドラッグして右側の「Generate」をクリックすると画像を生成できます。


下の組み合わせが可能になっています。

- iPhone(3G/3GS) / iPhone4 / iPad
- 縦向き / 横向き






ちなみに、iPhoneで HOMEボタンと電源ボタンを同時に押すとスクリーンショットが撮影できます。

2010年8月20日金曜日

[iOS]FacebookとTwitter画像サービスに画像をアップロードできるアプリ - PicUploader をリリースしました

新しくiPhone/iPod touchアプリをリリースしたのでお知らせします。


PicUploader 1.0.0




PicUploaderはFacebookとTwitter画像サービスに画像をアップロードできるアプリです。




[起動画面]




[Twitterへの投稿画面]


サポートページを用意しているので、詳しくはそちらをご覧ください。

PicUploader サポートページ
http://www.mudaimemo.com/iphone/picuploader/

2010年8月19日木曜日

[iOS] FacebookとTwitterへの画像アップロードを高速化 - SkipBleach,XProcess,Monochromiaバージョンアップのお知らせ

アップデートのお知らせです。




今回のアップデートは上の3アプリ共通で機能を改善しました。


FacebookとTwitter画像サービスへ写真をアップロードする際のパフォーマンスを向上させました。
だいたい5割程度アップロード時間が短縮されているはずです。

これで3G環境でもある程度ストレスなくアップロードが可能になったはずなのですが、どうでしょうか。


ただ、時間帯によっては時間がかかりすぎてタイムアウトになっていしまうことがあります。(特にTwitPic!)
その場合はアップロード先のサービスを変更するか、時間を置いてから再度トライしてみてください。
よろしくお願いします。




写真サービスの話題なので、こちらも宣伝

SkipBleachとMonochromiaはFlickrグループで写真の投稿をお待ちしています。


Flickr: SkipBleach - iPhone App
http://www.flickr.com/groups/skipbleach_iphone/

Flickr: Monochromia - iPhone App
http://www.flickr.com/groups/monochromia_iphone/


細かい規定などは特にありません。
各アプリで加工した写真であれば、どんな写真でも受付中です。
まだメンバー数は少ないですが、AppStore経由でけっこうアクセスはあるみたいです。



もうひとつお知らせ

SkipBleach, XProcess, MonochromiaのサポートページにiPhone4版のスクリーンショットを用意しました。
iPhone4でアプリを開くとこんな感じか、というのを確認していただければと思います。





SkipBleach: http://www.mudaimemo.com/iphone/skipbleach/

XProcess: http://www.mudaimemo.com/iphone/xprocess/

Monochromia: http://www.mudaimemo.com/iphone/monochromia/

2010年8月10日火曜日

[iOS]Twitterへの写真アップロード | 写真の拡大・切り抜き機能を追加したSkipBleach,Monochromia,XProcessの新バージョンをリリースしました

アップデートのお知らせです。






今回のアップデートは上の3アプリ共通で新機能を追加しました


  • Twitter画像サービスへの画像アップロード & Twitterへのツイート
  • 写真の拡大・切り抜き機能



== Twitter画像サービスへの画像アップロード & Twitterへのツイート

(画像はSkipBleachの送信画面)



下の4つの画像サービスをサポートしています。


上のサービスをご利用の方には説明不要かと思いますが
Twitterのアカウントさえ持っていれば特別な設定は必要ありません。

SkipBleach, Monochromia, XProcessではTwitterのOAuth Echoという認証機能を使い、上記の画像サービスの認証&アップロードが可能になっています。
初回アップロード時にTwitterのユーザー名とパスワードの入力を求められます。
一度ログインするとアカウントの切り替えなしに各画像サービスに対して写真のアップロードが可能になります。


自分がアップロードした写真の編集・削除などは現在のところアプリ内では行えません。
アップロードしたサービスに、アップロードのさいに利用したTwitterのアカウントを使ってログインすると編集・削除が行えます。



== 写真の拡大・切り抜き編集機能

写真アルバムから選択した写真・カメラで撮影した写真に対してマルチタッチ操作で画像の一部分の拡大・切り抜き編集を行う機能を追加しました。

この機能は「設定」の「編集モード」をオンにすると可能になります。


(画像はSkipBleachの編集画面)

2010年7月13日火曜日

[iOS] クロスプロセスをシミュレートできるXProcessをリリースしました


XProcess

XProcess (クロスプロセスと発音します)はiPhone/iPod touch上で簡単にクロスプロセス処理をシミュレートできるアプリです。

クロスプロセスは元々フィルム現像のテクニックの一種で、色合いやコントラストをわざと崩すことで独特の効果を写真に与えることができます。

日常の何気ない写真にクロスプロセス処理をほどこすだけで一風変わった写真ができるあがるので、トイカメラやトイデジなどで気軽に写真を撮るのが好きな方に人気があるのも特徴です。



XProcessの使い方

XProcessには難しい設定などは一切必要ありません。

まずは付属のカメラで写真を撮影するか、写真アルバムから写真を選択してください。

あとはお好きなように色を調節するだけです。
赤・緑・青の各スライダーを適当に動かしてみてください。
写真の色合いとコントラストががらっと変わります。

また周辺光量も調節可能になっているので、(スライダーの部分をスクロールしてください。色スライダーの下に周辺光量スライダーがあります。)、同じ色合いでも雰囲気を変えることが可能になっています。


Shake to shuffle

写真を選択したあとiPhone/iPod touchを軽く振るとランダムに色合いが変化します。
思いもかけない効果が現れることがあるので一度お試しを。


XProcess screenshot

XProcess01

XProcess04



2010年7月10日土曜日

[iOS] SkipBleach / Monochromia - アップデートのお知らせ

iPhoneアプリ アップデートのお知らせです


SkipBleach version 1.1.2 リリースしました app store

  • iPhone 4 のRetina Display対応として処理速度を改善しました。


Monochromia version 1.3.1 リリースしました app store

  • "Chocolate" (チョコレート)フィルターを追加しました。
  • オリジナルサイズの出力をサポートしました。
  • フィルター用のアイコンを追加しました。



審査待ちの新アプリもありますので、そちらは承認された際に追ってお知らせします。


以下余談


イギリスのApp Store 有料写真カテゴリでSkipBleachが7位に入りました。

イタリア、スペイン、スウェーデン、デンマークなどでもランクインしているようです。

ヨーロッパのこじゃれた国の人たちに興味を持ってもらうというのは気持ちのいいものですな。


ただ、あんまり大きな声じゃ言えませんが、ダウンロード数的にはそんなにたいしたことありません

たぶんアメリカや日本だと、カテゴリ内のトップ10に入れば 0がひとつふたつ増えるんでしょうね。

2010年6月29日火曜日

[iOS] Monochromia 1.3.0リリースしました

iPhoneアプリ Monochromia のversion1.3.0をリリースしました。


変更点:

セピアやヴィンテージ調などの各種フィルタを追加
粒状感のコントーロール機能を追加
ファジー・モードを削除


building
Vintage Blue

Vintage Red
Vintage Red

monochromia
Red Highlight




2010年6月7日月曜日

[iOS] SkipBleach - 写真に"銀残し"効果を与えることができるアプリ - をリリースをしました

新しくiPhoneアプリをリリースしたのでご紹介。


SkipBleach - 銀残しアプリ


SkipBleachは写真に"銀残し"効果を与えることができるiPhone/iPod touchアプリです。

難しい設定は必要ありません。
写真をiPhoneのカメラで撮影するか写真アルバムから選択してください。
SkipBleachが自動でエフェクトをほどこします。
(手動でコントロールすることも可能です)


銀残しは英語で"skip bleach", "bleach bypass"と呼ばれる日本発の現像技術です。

銀残しをした写真はコントラストが強く彩度が低くなるのが特徴です。
なんとなくカッコよくておしゃれな感じ、の写真が簡単に実現できます。


映画やCMなどでも数多く利用されていて
「プライベート・ライアン」「マイノリティ・リポート」「ファイトクラブ」などの映画にはこの銀残しが使われています。




「銀残し」のコツ

SkipBleachは写真を選択した時点で自動的に銀残しエフェクトをほどこしますが
ひと口に「銀残し」といっても様々なバリエーションがあります。

一般に、銀残し処理をした写真は以下の特徴があります。

コントラストが強い

彩度が低い

暗め

SkipBleachアプリは コントラスト, 彩度, 明るさ の調整が可能になっています。

なので、

コントラストのスライダーを右に (コントラスト強め)
彩度のスライダーを左に (彩度低め)
明るさのスライダーを左に (暗め)

こうすると、ぐっと渋い写真ができあがります。
逆の操作をすると、銀残し処理をしていない普通の写真に近づきます。

いろいろパラメータを調節して、お好みの写真を作ってみて下さい。



komorebi

PM 13:30

2010年6月4日金曜日

[iOS] 簡単にモノクロ写真を撮影/加工できるiPhoneアプリ - Monochromia - をリリースしました

新しくiPhoneアプリをリリースしたのでご紹介します。




Monochromia - モノクロ写真アプリ


Monochromiaは簡単にモノクロ写真が撮影/加工できるシンプルなアプリです。

iPhoneのカメラで撮影するか写真アルバムから選択すると自動でモノクロ写真に変換するので、難しい設定は基本的に一切必要ありません。

コントラスト/明るさ/周辺光量の調節すれば簡単にお好みの写真を作れます。



写真加工系のiPhoneアプリはたくさんありますがモノクロに特化したものはあまりみかけませんよね。

もちろん他の写真アプリでもモノクロ化できるものはあります。
だけど、「なんでもアリ」のアプリだと設定項目が色々ありすぎて、逆に使いづらいのかなと思いこのアプリを作りました。

Monochromiaはモノクロ写真に特化することで、最小限の設定で簡単にお好みのモノクロ写真を撮影/加工することを目指しています。


PM 9:00

komorebi

もっとサンプル写真見たいという方はこちらをどうぞ御覧下さい (Flickr)


Flickrグループもありますので、Flickrを利用しているかたはお気軽にご参加ください!

2010年6月2日水曜日

[iOS] BinaryCamera Lite - リリース後1週間のダウンロード数をさらしてみる

BinaryCamera LiteがApp storeでダウンロード可能になってから1週間経過しました。(App Store)


これからiPhone/iPadアプリをリリースしようとしている人、リリースしている人、とにかく興味がある人向けに、リリース後1週間でどれくらいダウンロードされたかさらしてみます。

参考程度に有料版のBinaryCameraのデータもならべてみました。
(こちらはリリースから1ヶ月ほど経過しています)




それでは、こちらが1週間のダウンロード数の変移です。

2010/5/25から2010/5/31のデータです

ダウンロード可能になった時刻がMay 25, 2010 16:01なので、初日はあまり伸びていません。

一番ダウンロードが多かった 5/26のダウンロード数が 209

それから右肩下がりで、1週目は合計 824 ダウンロードでした。

(ちなみに有料版のBinaryCameraは合計 22 ダウンロード)




ついでに国別のダウンロード数もさらしておきます。 (上位15カ国)



BinaryCamera Lite



BinaryCamera


BinaryCameraは日本語版があるとはいえ、日本のダウンロードが多いです。
台湾(TW)と香港(HK)が多い理由が分かりません。



このアプリはこのブログとTwitterでちょこっとつぶやいたくらいしか告知しませんし、普通の開発者が普通に開発したアプリなので、まあこれくらいの数字が妥当でしょうと思います。



あ、BinaryCamera Liteは無料アプリなので、お気軽にどうぞ!


第2弾第3弾のアプリも只今appleに申請中なので、そちらもよろしくお願いします。



BinaryCamera (App Store)

BinaryCamera Lite (App Store)

2010年6月1日火曜日

Google Font APIをjQueryであれこれするデモを作ってみた

Google Font APIがけっこう面白そうだったので軽く触ってみました。

うん、すごいですね!

見慣れないフォントだと画像だと思ってしまいます。
(右の画像はFont APIを利用した文字をキャプチャしたものです)



たぶんこんなこと実際にする局面っていうのはほとんどないでしょうけど、jQueyを使ってfont-familyを動的に変更するサンプルを作ってみました。
まあ、中身ぺらっぺらのお遊びです。

Google Font API Example
http://www.mudaimemo.com/demo/google_font_api/