iPhone SDK 3.1.x あたりでの話です。

iPhoneでカメラ撮影した後の画像をファイルに保存する際(写真ライブラリじゃなくて)には 一度NSDataに変換してから保存するステップになると思うんですが、 NSDataに変換したデータをUIImageに戻すと写真の方向がおかしくなってしまいました。

具体的にはiPhoneを縦にして撮影した写真が横になってしまったりとか。

結論からいいますと、UIImagePNGRepresentationを使ってNSDataに変換していたのがダメらしく、UIImageJPEGRepresentationならOKでした。あんまり根本的解決になってないけれど、妥協できるラインだったのでこの方法で対処しました。

縦横の方向がおかしくなるコード例

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // UIImage取り出し
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    // PNGデータに変換
    NSData *imageData = UIImagePNGRepresentation(originalImage);
    // NSDataをUIImageに戻す
    UIImage *decodedImage = [UIImage imageWithData:imageData];
    // UIImageViewに設定
    imageView.image = decodedImage;
    // イメージピッカーを非表示
    [self dismissModalViewControllerAnimated:YES];
}

縦横の方向を正しく保持できるコード例

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // UIImage取り出し
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    // JPEGデータに変換
    NSData *imageData = UIImageJPEGRepresentation(originalImage, 0.9);
    // NSDataをUIImageに戻す
    UIImage *decodedImage = [UIImage imageWithData:imageData];
    // UIImageViewに設定
    imageView.image = decodedImage;
    // イメージピッカーを非表示
    [self dismissModalViewControllerAnimated:YES];
}

超参考になったページ

Fifty Outs: Camera image orientation
http://mohrt.blogspot.com/2009/05/camera-image-orientation.html

Posted in Objective-C at 4月 13th, 2010. No Comments.