2010-10-14
■ [AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する
![[AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント [AssetsLibrary] フォトライブラリの写真にExif情報を付けて保存する - Ni chicha, ni limona - 平均から抜けられない僕 のブックマークコメント](http://r.hatena.ne.jp/images/popup.gif)
iOS4.1から、カメラロールにデータを保存する際に画像のメタデータも一緒に保存できるようになりました。
つまり、iOS3以前ではトリッキーな方法でしか実現できなかったExif情報の付与も、ごく簡単にできるようになったわけです。
具体的には、ALAssetsLibraryクラスのwriteImageToSavedPhotosAlbum:metadata:completionBlock:メソッド、あるいはwriteImageDataToSavedPhotosAlbum:metadata:completionBlock:メソッドを使用します。両者の違いは画像データがCGImageRefか、NSDataかです。
イメージピッカーで選んだ写真を元に、コメントとシャッター速度の2つのExif情報を付けて保存するサンプルコードを以下に記します。
#import <AssetsLibrary/AssetsLibrary.h> #import <ImageIO/ImageIO.h> -(IBAction)takeButton:(id)sender { UIImagePickerController *picker = [[[UIImagePickerController alloc] init] autorelease]; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.delegate = self; [self presentModalViewController:picker animated:YES]; } - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL]; if (assetURL) { ALAssetsLibraryAssetForURLResultBlock resultBlock = ^(ALAsset *asset) { ALAssetRepresentation *representation; representation = [asset defaultRepresentation]; // 元から付いているメタデータも残す NSMutableDictionary *metadata; metadata = [[NSMutableDictionary alloc] initWithDictionary:[representation metadata]]; // コメント、シャッター速度をExif情報として設定 NSDictionary *exif = [NSDictionary dictionaryWithObjectsAndKeys: @"コメント", (NSString*)kCGImagePropertyExifUserComment, [NSNumber numberWithFloat:0.125f], (NSString*)kCGImagePropertyExifExposureTime, nil]; [metadata setObject:exif forKey:(NSString*)kCGImagePropertyExifDictionary]; // カメラロールにメタデータを付けて書き込み ALAssetsLibrary* l = [[ALAssetsLibrary alloc] init]; [l writeImageToSavedPhotosAlbum:[representation fullScreenImage] metadata:metadata completionBlock:^(NSURL* url, NSError* e){ NSLog(@"Saved: %@<%@>", url, e); }]; [metadata release]; [l release]; }; ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease]; [library assetForURL:assetURL resultBlock:resultBlock failureBlock:^(NSError *error) { NSLog(@"error:%@", error); }]; } else { NSLog(@"error"); } [picker dismissModalViewControllerAnimated:YES]; }
事前にAssets Libraryフレームワークをプロジェクトに追加し、さらにExif情報を文字列リテラルで扱えるImageIOフレームワークも追加するのを忘れないようにお気を付けください。
こうして保存した画像をMac OS X上のプレビューアプリで見れば、Exif情報が付与されていることが分かります。
ちなみにAssets Libraryフレームワークでは、既存の写真を変更したり、削除したりすることはできません。新しいデータをカメラロールに保存できるのみです。
カメラロールくらいは変更・削除を許可してくれてもいいのになあと思いますが・・・。
それにしてもAssets Libraryフレームワークは超便利です。独自のイメージピッカーも自由に作れるようになりますし、ますます便利になりましたね!
参考サイト
イメージピッカーから選んだ写真の、Exif情報を取り出すときのサンプルコード。 @sumihiro さん。
ImageIOフレームワークとCoreGraphicsを使って、バンドル内にExif付きのデータを保存するサンプルコード。 @nakamura001 さん。
http://buyviagra100mgo.com/ - buy viagra canada
<a href="http://buyviagra100mgo.com/">cheap viagra online</a>
viagra pepsi
#SORRYME#PLS#
when will cialis patent expire
buy cialis from australia
cheapest pharmacy for cialis
cialis online shop
rui cialis review
order cialis online with mastercard
generic cialis 20mg
https://stowe365.com/#Buy-Cialis
do i need a prescription to buy cialis in canada
cialis generique quality
cialis osterreich
next day delivery cialis
comprare cialis in farmacia
cialis in new orleans
sublingual generic cialis
https://stowe365.com/#Buy-Cialis
do i need a prescription for cialis in the us
quick delivery cialis
what is better cialis or viag...
donde comprar cialis seguro
cialis online sicuro forum
lisinopril and cialis
express scripts cialis price
https://stowe365.com/#Buy-Cialis-20-mg
buy cialis online fed ex shiping
cialis rezeptfrei biz shop index
order cialis free overnight delivery
buy generic cialis super active
cialisextense
low cost cialis generic
cialis cena
https://stowe365.com/#Buy-Cialis-20-mg
cialis stopped working
cant get hard without cialis
cialis store net serios
buy real cialis canada
acquistare cialis online sicuro
cialis review from sears
cialis online germany
https://stowe365.com/#Buy-Cialis
buy cialis online usa oklahoma
cialis online nabp
glaxo cialis buy
dangers of buying cialis online
purchase cialis from canada
cialis and weed
cialis bestellen deutschland
https://stowe365.com
cialis australia next day delivery
buy cialis brand name
non cript cialis
do us pharmacy sell generic cialis
cialis 10mg or 20mg
cialis orginal
cialis online america
https://stowe365.com/#Buy-Cialis
best sites for low price cialis
sources for cialis
best price brand cialis
cialis en ligne france
cialis originale senza ricetta
most reliable place to buy cialis online
cialis for sale in canada 168
https://stowe365.com/#Buy-Cialis-20-mg
cialis testimonials forum
cialis 20mg review
cialis without prescription canada
cialis 20mg lilly
mercury drugstore cialis
cialis ireland to buy
online shopping malaysia generic cialis
https://stowe365.com/#Buy-Cialis-20-mg
acheter cialis belgique
lowest price cialis 20mg
cialis 36 hour pill
cialis purchace
purchase cialis online no prescription
cialis in new orleans
extrameds buy cialis
https://stowe365.com/#Buy-Cialis
cialis precio espana
no prescription cialis usa
buy cialis online in nz 170
cialis red
pharmacy bill cialis
brand name cialis from lilly
whole healthy man cialis
https://stowe365.com
cialis las vegas
cialis acquisto sicuro
cialis 500 pills for cheap price
cost of cialis in dubai
cialis replacement
cialis same day delivery
buy cialis in angeles city
https://stowe365.com/#Buy-Cialis
cialis for daily use testimonials
cialis 5mg daily dose price
cialis 36 hour review
cialis brand name pills to buy
cheapest canadian pharmacy for cialis
cialis tyskland
get cialis without presecription
https://stowe365.com/#Buy-Cialis
cialis tadalafil 20 mg 2 tablets prices
cialis danger
over counter med comparable to cialis
best site to buy generic cialis
cialis with depoxetine
cialis-shop.nl ervaringen
comprar cialis 5mg lilly
https://stowe365.com
cout du cialis
delta enterprises cialis
best cialis deals
cialis rezeptfrei paypal
cialis journalier
buy cialis online germany
cialis en pharmacie
https://stowe365.com
cialis online without prescription
cheap cialis 10mg
cialis pagamento paypal
buy cialis online scams
buy cialis one day receipt
cialis coupon walgreens
price cialis singapore
https://stowe365.com/#Buy-Cialis
cialis sold cheap
mailorder cialis
cialis generique france
does cialis require a prescription in canada
cialis generic cost
cialis tablets australia
cialis commercial song
https://stowe365.com/#Buy-Cialis
buy cialis spain
<a href="http://kaivanrosendaal.com/">cialis reviews</a>
free trial offer for cialis
ricetta cialis online
<a href=http://kaivanrosendaal.com>cialis for daily use</a>
centurion laboratories cialis
order cialis online from canada
http://kaivanrosendaal.com/#cialis-savings-card