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];
}
{
// 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];
}
{
// 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.