UIImage, EXIF тАЛтАЛрдФрд░ рд░рдирдЯрд╛рдЗрдо рдХрд╛ рдПрдХ рд╕рд╛

рдЫрд╡рд┐

IOS рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реЗрдм рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЙрдирдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдлрд╝реЛрдЯреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЖрдкрдХреЛ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕реЛрд╢рд▓ рдиреЗрдЯрд╡рд░реНрдХ VKontakte, Facebook - рд╕реЗрд╡рд╛рдПрдВ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рд▓рдЧрднрдЧ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рддреЛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлреЛрд░рд╕реНрдХреНрд╡реЗрдпрд░, рдкрдеред

рдРрд╕реА рд╕реЗрд╡рд╛рдПрдБ рдкреВрд░реНрдг рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ (рдФрд░ рдпрд╣ рд╣рдо рд╣реИрдВ) рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдпрд╛ рдЙрдирдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рднрд╛рдЧреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЬреЛ рдлреЛрдЯреЛ рдПрд▓реНрдмрдо рд╕реЗ рдЪрд┐рддреНрд░ рд▓реЗрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рдирдИ рддрд╕реНрд╡реАрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдкрд╣рд▓реЗ рд╡рд┐рдХрд▓реНрдк рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдХ .h рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
@interface MYViewController : UIViewController<UIImagePickerControllerDelegate, UINavigationControllerDelegate> ... @end 


рдЖрдкрдХреЗ рдирд┐рдпрдВрддреНрд░рдХ .m рдлрд╝рд╛рдЗрд▓ рдореЗрдВ:
 @implementation MYViewController - (IBAction)pickupImage:(id)sender { UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.delegate = self; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [self presentModalViewController:imagePicker animated:YES]; [imagePicker release]; } #pragma mark - UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; //   UIImage  // [serviceAPI postWithText:@" !" withImage:image]; [picker dismissModalViewControllerAnimated:YES]; } @end 


рдХреБрдЫ рдЗрд╕ рддрд░рд╣ред рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдпрд╛ рдмрд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рдкрдврд╝реЗрдВред рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдареАрдХ рджрд┐рди рд╡реЗрдм рд╕реЗрд╡рд╛ EXIF тАЛтАЛрдЫрд╡рд┐ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рди рдХрд░реЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢реВрдЯрд┐рдВрдЧ рдХреЗ рд╕реНрдерд╛рди рдФрд░ рдХреИрдорд░реЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рддрд╕реНрд╡реАрд░ рд▓реА рдЧрдИ рдереА, рдкреНрд░рддреНрдпреЗрдХ рддрд╕реНрд╡реАрд░ рдХреЗ рддрд╣рдд рдлреЛрдЯреЛ рдХрд╛ рдЙрдиреНрдореБрдЦреАрдХрд░рдгред рдФрд░ рдлрд┐рд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХреЛрдИ EXIF тАЛтАЛрдбреЗрдЯрд╛ рдирд╣реАрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВред

рдирд┐рд░рдВрддрд░ UIImagePickerControllerOriginalImage рдореВрд▓ рдХрд╛ рдирд╛рдо рдХрд╛рдлреА рдореВрд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдореВрд▓ рд╣реИ рдХрд┐ рдкреВрд░реА рддрд╕реНрд╡реАрд░ рдЖрдкрдХреЛ рдмрд┐рдВрджреБ (0,0) рд╕реЗ рдмрд┐рдВрджреБ ( рдЪреМрдбрд╝рд╛рдИ -1, рдКрдБрдЪрд╛рдИ -1) рддрдХ рджреА рдЧрдИ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдХреНрд░реЙрдк рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдЭрдВрдбрд╛ рд╕реЗрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
 imagePicker.allowsEditing = YES 

рдпрд╣ рдПрдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдЫрд╡рд┐

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдореЗрдВ рдХреЛрдб рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдореВрд▓ рдлреЛрдЯреЛ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рднреА рд╣реЛрддреА рд╣реИред UIImagePickerControllerReferenceURL рдХреБрдВрдЬреА рдФрд░ AssetsLibrary рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ ред

IOS SDK 4.1 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛, info рдкреИрд░рд╛рдореАрдЯрд░, рдЬреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдкрджреНрдзрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдВрдЬреА UIImagePickerControllerReferenceURL рджреНрд╡рд╛рд░рд╛ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдПрд▓реНрдмрдо рд╕реЗ рдлреЛрдЯреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдХреБрдВрдЬреА рдХрд╛ рдореВрд▓реНрдп рд╕рдВрдкрддреНрддрд┐, рдЬрд┐рд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рд▓рд┐рдВрдХ рд╣реИред

рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд╡рд┐рдзрд┐ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL]; ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; [library assetForURL:assetURL resultBlock:^(ALAsset *asset) { CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation]; // [serviceAPI postWithText:@" !" withImage:image withMetadata:...]; [library autorelease]; } failureBlock:^(NSError *error) { }]; [picker dismissModalViewControllerAnimated:YES]; } 


CLLocation *location = [asset valueForProperty:ALAssetPropertyLocation]; - рдпрд╣рд╛рдВ рд╣рдо рдлреЛрдЯреЛрдЧреНрд░рд╛рдлреА рдХреЗ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ <AssetsLibrary / ALAsset.h> рд╣рдо рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╢реЗрд╖ рдХреБрдВрдЬреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдФрд░ рдЖрдЧреЗ рд╣рдо рднреВ-рдЪрд┐рд╣реНрдиреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдЕрдВрддрддрдГ, рд╕реЗрд╡рд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ, рд╣рдо рдЫрд╡рд┐ рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде рдПрдХ POST рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕реЗ рд╣рдо UIImageJPEGRepresentation рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рдпрд╣ рдЗрди рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред Iphone-exif рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ exif рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЗ рдЕрдореВрд░реНрдд рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред

рдХреЛрдб рдЬреЛ рддрд╕реНрд╡реАрд░ рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 #import "EXF.h" #import "EXFUtils.h" + (NSData *)populateData:(NSData *)data byLocation:(CLLocation *)location { EXFJpeg *exfJpeg = [[[EXFJpeg alloc] init] autorelease]; [exfJpeg scanImageData:data]; //  ,      //     EXFGPSLoc* gpsLocLatitude = [[[EXFGPSLoc alloc] init] autorelease]; [self populateGPS:gpsLocLatitude byValue:[self locationArrayForValue:location.coordinate.latitude]]; [exfJpeg.exifMetaData addTagValue:gpsLocLatitude forKey:[NSNumber numberWithInt:EXIF_GPSLatitude]]; //     EXFGPSLoc* gpsLocLongitude = [[[EXFGPSLoc alloc] init] autorelease]; [self populateGPS:gpsLocLongitude byValue:[self locationArrayForValue:location.coordinate.longitude]]; [exfJpeg.exifMetaData addTagValue:gpsLocLongitude forKey:[NSNumber numberWithInt:EXIF_GPSLongitude]]; //  ""  NSString *refLatitude = (location.coordinate.latitude < 0 ? @"S" : @"N"); [exfJpeg.exifMetaData addTagValue:refLatitude forKey:[NSNumber numberWithInt:EXIF_GPSLatitudeRef]]; //  ""  NSString *refLongitude = (location.coordinate.longitude < 0 ? @"W" : @"E"); [exfJpeg.exifMetaData addTagValue:refLongitude forKey:[NSNumber numberWithInt:EXIF_GPSLongitudeRef]]; NSMutableData *dataWithExif = [NSMutableData data]; [exfJpeg populateImageData:dataWithExif]; return dataWithExif; } 


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рдлрд▓рддрд╛ рд╕реЗ рдПрдХ рдХрджрдо рджреВрд░ рд╣реИрдВред рд╣рдо NSData рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░, рд░рд┐рд╡рд░реНрд╕ рдСрдкрд░реЗрд╢рди рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ UIImage рдорд┐рд▓рддрд╛ рд╣реИред рдФрд░ рд╣рдореЗрдВ рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рднреА рдирд╣реАрдВ рдмрджрд▓рдирд╛ рд╣реИ рдЬреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреВрд░реНрд╡ рд╕рдВрдХреЗрдд рдХреЗ рдХреЗрд╡рд▓ UIImage рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рд╢, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ , рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢, [UIImage imageWithData: data] рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпрд╛рдБ NSData рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рднреА рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рднреВ-рд╕реНрдерд┐рддрд┐, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ) рдЦреЛ рджреЗрддреА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рд╕реАрдзреЗ "рдЕрдВрджрд░" рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, UIImage рд╕реНрддрд░ рдкрд░ рдЪрд┐рддреНрд░ рдХрд╛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред

рджреВрд╕рд░реЗ , рдЖрдк рдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрд╣рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ CoreGraphics рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдирд┐рдХрд╛рд╕

рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЪрд┐рддреНрд░ рдФрд░ рдЙрд╕рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдкреВрд░реЗ рд░рд╛рд╕реНрддреЗ рд╕реЗ рддрдм рддрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╣рдо NSData рд╡рд░реНрдЧ рдХреА рдХреЛрдИ рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рди рдХрд░ рд▓реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ POST рдЕрдиреБрд░реЛрдз рдмрдирд╛ рд▓реЗрдВред рдФрд░ рд╣рдо рд╕рдм рдХреБрдЫ рдмреЗрд╣рддрд░ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд░реНрдерди (UIImage + NSData-Exif) рдХреЗ рдХрд╛рд░рдг рдЗрд╕ рд░рд╛рд╕реНрддреЗ рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рднреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдкрдбрд╝реЗред

рдПрдХ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, NSMutableDictionary рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ UIImage рдФрд░ NSData рдХреЗ рдмреАрдЪ рдкрддреНрд░рд╛рдЪрд╛рд░ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рд╕реА рдХрд╛рдо рдХрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ UIImage рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдмрджреНрдз рд╡рд╕реНрддреБрдПрдБ

IOS 4.0 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдСрдмреНрдЬреЗрдХреНрдЯ рд╕рдВрдШреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдПрдХ рдХрдиреЗрдХреНрд╢рди рдЬрд┐рд╕реЗ рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рднрд╛рд╖рд╛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдБ ред рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ <objc / runtime.h> рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдПрд╕реЛрд╕рд┐рдПрд╢рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy policy)

рдкрд┐рдЫрд▓реЗ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдп рдУрдмрдЬреЗрдХ рд╡рд░реНрдЧреЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рдХреЗ рдЧреБрдгреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗ:
  /* objc_setAssociatedObject() options */ enum { OBJC_ASSOCIATION_ASSIGN = 0, OBJC_ASSOCIATION_RETAIN_NONATOMIC = 1, OBJC_ASSOCIATION_COPY_NONATOMIC = 3, OBJC_ASSOCIATION_RETAIN = 01401, OBJC_ASSOCIATION_COPY = 01403 }; typedef uintptr_t objc_AssociationPolicy; 

рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХрд╛ рдкреЙрдЗрдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
id objc_getAssociatedObject(id object, void *key)
рдЗрд╕рд▓рд┐рдП ALAssetsLibrary рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ UIImage рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:

  #import <objc/runtime.h> // -   .      char kUIImageExifKey; ... objc_setAssociatedObject(<#image#>, &kUIImageExifKey, <#DATA#>, OBJC_ASSOCIATION_RETAIN); ... 


UIImage рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХрд╛ рдорд╛рд░реНрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛

1) рдПрдХ рддрд╕реНрд╡реАрд░ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;
2) рдЗрди рджреЛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░реЗрдВ;
3) рд╣рд░ рдмрд╛рд░ рддрд╕реНрд╡реАрд░ рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ UIImage рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛рд╡ рд░рдЦреЗрдВ (рдЪрд┐рддреНрд░ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрджрд┐)ред
4) рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рд╕реЗ рддреБрд░рдВрдд рдкрд╣рд▓реЗ, iphone-exif рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рд╡рд╣ рд╕рдм рд╣реИред

рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╣реИрдВ, рддреЛ рдмрд╕ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдлреЛрдЯреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рдЗрд╕реЗ "рдореБрдХрд╛рдмрд▓рд╛" рдХреЛрдб рдореЗрдВ рд░рдЦреЗрдВ, рдФрд░ рдЗрд╕реЗ рдЧрд┐рдЯрдм рдкрд░ рдбрд╛рд▓ рджреЗрдВред
рдЫрд╡рд┐

Source: https://habr.com/ru/post/In148837/


All Articles