Change the orientation of the camera image

I tried to upload images from iPhone to my web server, but some of them, like images, change orientation after wards. This only happens with camera images, and not with simple images downloaded to the device from my machine.

Below is the code:

NSData *imgdataRepresentation = UIImageJPEGRepresentation(imgTemp, 0.5); ///////********************************************** // setting up the URL to post to NSString *addPhotoURL = [NSString stringWithFormat:@"%@%@%@",HTTP_HOST,ADD_PHOTO_URL,[userInfo.userDetail objectForKey:@"id"]]; // setting up the request object now NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:addPhotoURL]]; [request setHTTPMethod:@"POST"]; /* add some header info now we always need a boundary when we post a file also we need to set the content type You might want to generate a random boundary.. this is just the same as my output from wireshark on a valid html post */ NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; /* now lets create the body of the post */ NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"Album\"; filename=\"ipodfile.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imgdataRepresentation ]]; [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // setting the body of the post to the reqeust [request setHTTPBody:body]; // now lets make the connection to the web NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 
+4
upload iphone image orientation
Dec 30 '10 at 19:17
source share
2 answers

IPhone images are always saved the same way no matter how the phone is held, but a flag must be set in EXIF โ€‹โ€‹data, where the image orientation is indicated. Almost all native OSX applications, such as iPhoto and Preview, can read this EXIF โ€‹โ€‹orientation tag correctly and automatically rotate the image, but almost all Windows applications and web browsers do not take into account the orientation of the EXIF โ€‹โ€‹tag. Before saving, you must manually rotate the image on the web server. I don't know what kind of web server technology you are using, but C # code for this:

 public static void FixOrientation(this Image image) { // 0x0112 is the EXIF byte address for the orientation tag if (!image.PropertyIdList.Contains(0x0112)) { return; } // get the first byte from the orientation tag and convert it to an integer var orientationNumber = image.GetPropertyItem(0x0112).Value[0]; switch (orientationNumber) { // up is pointing to the right case 8: image.RotateFlip(RotateFlipType.Rotate270FlipNone); break; // up is pointing to the bottom (image is upside-down) case 3: image.RotateFlip(RotateFlipType.Rotate180FlipNone); break; // up is pointing to the left case 6: image.RotateFlip(RotateFlipType.Rotate90FlipNone); break; // up is pointing up (correct orientation) case 1: break; } } 
+20
Dec 30 '10 at 19:24
source share

You can get the orientation of a UIImage image using the imageOrientation method. For example, you want to save an image taken from a camera that you can take:

 UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; if (image) { ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library writeImageToSavedPhotosAlbum:[image CGImage] orientation:[image imageOrientation] completionBlock:^(NSURL *assetURL, NSError *error){ /* error handling */ }]; [library autorelease]; } 

and then when you want to get the UIImage from the library, you can get the orientation by doing something like:

 UIImage *image = [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage] scale:1.0 orientation:[asset orientation]]; 
+3
Jan 17 '11 at 10:00
source share



All Articles