UIImage
画像データをデコードして、編集および表示できるようにします。
UIImageWriteToSavedPhotosAlbum([UIImage imageWithContentsOfFile:[NSData dataWithContentsOfFile:[self getImagePath]]], self, @selector(image:didFinishSavingWithError:contextInfo:), nil);
最初に画像をデコードし、次にUIImageWriteToSavedPhotosAlbum
メソッドでエンコードして戻します。
代わりに、ALAssetsLibrary / writeImageDataToSavedPhotosAlbum:metadata:completionBlock:を使用する必要があります。
ALAssetsLibrary *assetLib = [[[ALAssetsLibrary alloc] init] autorelease];
[assetLib writeImageDataToSavedPhotosAlbum:[self getImagePath] metadata:nil completionBlock:nil];
メタデータと完了ブロックを呼び出しに渡すこともできます。
編集:
画像を取得するには:
[info objectForKey:@"UIImagePickerControllerOriginalImage"]
UIImage
から選択されたデコードが含まれUIImagePickerController
ます。代わりに使用する必要があります
NSURL *assetURL = [info objectForKey:UIImagePickerControllerReferenceURL];
を使用すると、 ALAssetsLibrary / assertForURL:resultBlock:failureBlock:メソッドを使用してそれをassetURL
取得できるようになります。ALAsset
ALAssetsLibrary *assetLib = [[[ALAssetsLibrary alloc] init] autorelease];
[assetLib assetForURL:assetURL resultBlock:resultBlock failureBlock:failureBlock];
これで、そのイメージの変更されていないNSDataを取得できます。
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset){
ALAssetRepresentation *assetRep = [asset defaultRepresentation];
long long imageDataSize = [assetRepresentation size];
uint8_t* imageDataBytes = malloc(imageDataSize);
[assetRepresentation getBytes:imageDataBytes fromOffset:0 length:imageDataSize error:nil];
NSData *imageData = [NSData dataWithBytesNoCopy:imageDataBytes length:imageDataSize freeWhenDone:YES]; // you could for instance read data in smaller buffers and append them to your file instead of reading it all at once
// save it
[imgdata writeToFile:filePath atomically:NO];
};
ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){
NSLog(@"Cannot get image - %@",[myerror localizedDescription]);
//
};
コードに誤りがあった可能性がありますが、手順は上記のとおりです。何かが正しく機能しない場合、またはこれをもう少し効率的にしたい場合は、stackoverflowや他のサイトNSData
からの読み取りなどを行う例がたくさんあります。ALAsset