使用PHPhotoLibrary可以更换图像特别相机胶卷上的PHasset。
-(void) replaceimagefromcameraroll :(PHAsset*)replaceasset {
PHAsset *asset = replaceasset;
NSString *localStr=asset.localIdentifier;
NSRange range = [localStr rangeOfString:@"/"];
NSString *newString = [localStr substringToIndex:range.location];
NSString *appendedString=[NSString stringWithFormat:@"%@%@%@",@"assets-library://asset/asset.JPG?id=",newString,@"&ext=JPG"];
NSLog(@"%@ phasset ",appendedString);
NSURL *ReplaceAsseturl = [NSURL URLWithString:appendedString];
PHFetchResult *result = [PHAsset fetchAssetsWithALAssetURLs:@[ReplaceAsseturl] options:nil];
PHAsset *assetReplace = result.firstObject;
if ([assetReplace canPerformEditOperation:PHAssetEditOperationContent])
{
[asset requestContentEditingInputWithOptions:nil completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
PHContentEditingOutput *contentEditingOutput = [[PHContentEditingOutput alloc] initWithContentEditingInput:contentEditingInput];
UIGraphicsBeginImageContextWithOptions(_imgPreviewView.bounds.size, NO, 0.0);
[_imgPreviewView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *outputData = UIImageJPEGRepresentation(img, img.scale);
PHAdjustmentData *adjustmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:@"AdjustementDataIdentifier" formatVersion:@"1.0" data:outputData];
contentEditingOutput.adjustmentData = adjustmentData;
BOOL wrote = [outputData writeToURL:contentEditingOutput.renderedContentURL options:NSDataWritingAtomic error:nil];
[SVProgressHUD dismiss];
if (wrote)
{
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetChangeRequest *request = [PHAssetChangeRequest changeRequestForAsset:asset];
request.contentEditingOutput = contentEditingOutput;
} completionHandler:^(BOOL success, NSError *error) {
// console output : 1
if (success){
NSLog(@"success : %@", @(success));
[SVProgressHUD showSuccessWithStatus:ckSuccesReplaceImage];
}
else{
NSLog(@"error : %@", error);
}
}];
}
}];
}
}
雅不要忘了在Info.plist文件
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) would like to access your photo library to let you select a picture.</string>
你试过ALAsset setImageData添加以下代码:元数据:completionBlock:? – combinatorial
有趣的两种方法: - setImageData - writeModifiedImageDataToSavedPhotosAlbum 但我认为他们只是重新创建一个新的图像。它们不替换前一个 – pierre23
setImageData的文档说它编写图像如果它是可编辑的,您可以先检查它是否可以使用editable属性进行编辑 – combinatorial