2013/01/29

iOSで連絡先のPhotoサイズのままで表示 - [開発] - AddressBook、ABRecordRef

 

以前、iOSで連絡先からデータを検索する方法はこちらで紹介した。

今回はその連絡先で設定した写真(Photo)の取得とそのサイズの指定について。

ご存じのように、連絡先では写真(主に顔の写真)が設定でき、またその際に正方形のサイズ内で拡大・編集、つまりトリミングができる。

アプリケーション側で写真を取得しUIImageViewに表示する際に、この連絡先で編集しトリミングされたサイズのまま表示する方法は次の通りだ。



1.連絡データの取得

アプリケーションから連絡先にアクセスして、アドレスデータを取得する方法は、
以下の記事を参照。

連絡先から名前で検索 - [開発] - iOS SDK AddressBook


2.フォーマット指定で画像を取得

取得したABRecordRefの個人データ(person)を利用して写真を取得する。
写真はNSDataの型で取得できる。

単純に取得する場合
 
NSData  *photoData = (NSData *)ABPersonCopyImageData(person);
 
これでオリジナルデータを取得できる。



長方形のオリジナル写真

オリジナルデータをそのまま

しかし、オリジナルデータをそのまま正方形のUIImageViewに設定した場合は連絡で編集した見た目とは異なってしまう。またオリジナル写真が長方形の場合、マスク処理などをしてやらないかぎり正方形のUIImageVIewに設定してしまうと写真がゆがんでしまう。

そこで、連絡先で編集したトリミングのままアプリケーションで表示できるように、以下のEnumを指定して写真データを取得できるメソッドが用意されている。
 
 typedef enum {
         kABPersonImageFormatThumbnail = 0,      // the square thumbnail
         kABPersonImageFormatOriginalSize = 2    // the original image as set by ABPersonSetImageData
   } ABPersonImageFormat;
 

オリジナルデータを取得する場合
 
 NSData  *orgData = (NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatOriginalSize);

 

トリミングデータを取得する場合
 
 NSData  *thumData = (NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
 

連絡先編集でトリミング

トリミング画像設定

アプリでトリミング画像表示

このフォーマットを指定できるABPersonCopyImageDataWithFormatiOS4.1以上で利用が可能。

以上。





Related Posts Plugin for WordPress, Blogger...

0 件のコメント:

コメントを投稿