ALAsset, отправьте фотографию на веб-сервис, включая его exif-данные - PullRequest
4 голосов
/ 30 июля 2011

Я хочу отправить фотографию с рулона камеры на веб-сервисы, включая данные exif.Я использую ASIFormDataRequest - поэтому я делаю:

ASIFormDataRequest *request = [[ASIFormDataRequest alloc]initWithURL:url];

Чтобы сохранить память, я напрямую хочу отправить файл:

[request addFile:localPath forKey:@"image"];

Так что мне нужен локальный путь к активу.Я думаю, что не могу получить локальный путь к активу, поэтому я временно сохраняю актив в файл:

ALAsset* selectedAsset = [assets objectAtIndex:index];
CGImageRef imageRef = selectedAsset.defaultRepresentation.fullScreenImage;
UIImage* image = [UIImage imageWithCGImage:imageRef];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesDirectory = [paths objectAtIndex:0];

NSData* imageData = UIImagePNGRepresentation(image);
NSString* filePath = [NSString stringWithFormat:@"%@/imageTemp.png",cachesDirectory];
[imageData writeToFile:filePath atomically:YES];

Затем позже я использую этот путь, чтобы сделать

[request addFile:localPath forKey:@"image"];

изображение отправляется на сервер - но без нужных мне exif-данных.Кроме того, я думаю, что должен быть более разумный способ сделать это.

tia

1 Ответ

10 голосов
/ 30 июля 2011

хорошо - думаю, я понял это. Хитрость заключается в использовании необработанных данных defaultRepresentaion:

ALAsset* selectedAsset = [assets objectAtIndex:index];

int byteArraySize = selectedAsset.defaultRepresentation.size;

NSMutableData* rawData = [[NSMutableData alloc]initWithCapacity:byteArraySize];
void* bufferPointer = [rawData mutableBytes];

NSError* error=nil;
[selectedAsset.defaultRepresentation getBytes:bufferPointer fromOffset:0 length:byteArraySize error:&error];
if (error) {
    NSLog(@"%@",error);
}
rawData = [NSMutableData dataWithBytes:bufferPointer length:byteArraySize];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cachesDirectory = [paths objectAtIndex:0];
NSString* filePath = [NSString stringWithFormat:@"%@/imageTemp.png",cachesDirectory];
[rawData writeToFile:filePath atomically:YES];

После использования пути для отправки изображения на сервер файл на сервере сохраняет все данные exif

...