4

カメラロールからWebサービスに写真を送信したい-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

4

1 に答える 1

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データを保持します

于 2011-07-30T10:42:30.980 に答える