2012-11-27 99 views
1

我試圖在iPhone中將圖像(NSUserDefault)從UIImagePickerController中存儲。從UIImagePickerController在iPhone中存儲圖像?

這種方式存儲的圖像:

enter image description here

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    UIImage *originalImage=[info objectForKey:UIImagePickerControllerOriginalImage]; 
    NSData * imageData = UIImagePNGRepresentation(originalImage); 
    NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 
    [user setValue:imageData forKey:@"pictureData"]; 
} 

這種方式來獲取圖像:

NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 
UIImage *myImage = [UIImage imageWithData:[user valueForKey:@"pictureData"]]; 
[btn2 setImage:myImage forState:UIControlStateNormal]; 

enter image description here

當我檢索NSUserDefaults圖像設置UIButton ,最後t他顯示的圖像,但方向從下往上變化,如何解決這個問題?請幫助我

回答

1

使用UIImageJPEGRepresentation來存儲圖像int NSUserDefaults這樣:

NSData * imageData = UIImageJPEGRepresentation(originalImage, 90); 
NSUserDefaults *user = [NSUserDefaults standardUserDefaults]; 
[user setValue:imageData forKey:@"pictureData"]; 
2

A UIImage有一個屬性imageOrientation,它指示UIImageView和其他UIImage消費者旋轉原始圖像數據。這個標誌很有可能會被保存到上傳的jpeg圖像中的exif數據中,但是用來查看它的程序不符合該標誌。

要旋轉上傳時UIImage能正確顯示,您可以使用這樣的類別:

的UIImage + fixOrientation.h

@interface UIImage (fixOrientation) 

- (UIImage *)fixOrientation; 

@end 

的UIImage + fixOrientation.m

@implementation UIImage (fixOrientation) 

- (UIImage *)fixOrientation { 

// No-op if the orientation is already correct 
if (self.imageOrientation == UIImageOrientationUp) return self; 

// We need to calculate the proper transformation to make the image upright. 
// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored. 
CGAffineTransform transform = CGAffineTransformIdentity; 

switch (self.imageOrientation) { 
    case UIImageOrientationDown: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height); 
     transform = CGAffineTransformRotate(transform, M_PI); 
     break; 

    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, 0); 
     transform = CGAffineTransformRotate(transform, M_PI_2); 
     break; 

    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, 0, self.size.height); 
     transform = CGAffineTransformRotate(transform, -M_PI_2); 
     break; 
    case UIImageOrientationUp: 
    case UIImageOrientationUpMirrored: 
     break; 
} 

switch (self.imageOrientation) { 
    case UIImageOrientationUpMirrored: 
    case UIImageOrientationDownMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.width, 0); 
     transform = CGAffineTransformScale(transform, -1, 1); 
     break; 

    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRightMirrored: 
     transform = CGAffineTransformTranslate(transform, self.size.height, 0); 
     transform = CGAffineTransformScale(transform, -1, 1); 
     break; 
    case UIImageOrientationUp: 
    case UIImageOrientationDown: 
    case UIImageOrientationLeft: 
    case UIImageOrientationRight: 
     break; 
} 

// Now we draw the underlying CGImage into a new context, applying the transform 
// calculated above. 
CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height, 
             CGImageGetBitsPerComponent(self.CGImage), 0, 
             CGImageGetColorSpace(self.CGImage), 
             CGImageGetBitmapInfo(self.CGImage)); 
CGContextConcatCTM(ctx, transform); 
switch (self.imageOrientation) { 
    case UIImageOrientationLeft: 
    case UIImageOrientationLeftMirrored: 
    case UIImageOrientationRight: 
    case UIImageOrientationRightMirrored: 
     // Grr... 
     CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage); 
     break; 

    default: 
     CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.CGImage); 
     break; 
} 

// And now we just create a new UIImage from the drawing context 
CGImageRef cgimg = CGBitmapContextCreateImage(ctx); 
UIImage *img = [UIImage imageWithCGImage:cgimg]; 
CGContextRelease(ctx); 
CGImageRelease(cgimg); 
return img; 
} 

@end 
+1

感謝您的回覆 – SampathKumar

相關問題