2011-07-30 30 views
4

我想从相机胶卷发送照片到Web服务 - 包括其exif数据。 即时通讯使用ASIFormDataRequest - 所以我做的:ALAsset,将照片发送到包含其exif数据的Web服务

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

+0

你用url属性尝试ALAsset的默认表示? – Johnmph

+0

是的。似乎只是为了识别,就我所测试的情况而言,您无法使用它来访问资产。例如[NSData dataWithContentsOfURL:]返回nil。 – HeikoG

回答

10

行 - 我想我想通了。诀窍是与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数据

+0

非常感谢,这个片段真的是一个救命! –

+0

所以,如果我们上传的NSMutableData rawData,图像以及EXIF的细节将被上传,对吧? –

+1

是的。原始数据包含图像和EXIF元信息 – HeikoG