1 首先我们需要创建一个phone Extension target当然我们也必须知道Extension app必须在一个containg app内 我们从建立一个target开始
选择菜单 file->new->target
其中PhotoEditingViewController就是我们编辑图片的承载器,我们的图片展示以及代码处理都是在这里面完成,默认的使用sb创建的,而且不能更改,那些不懂sb的需要好好学习了。
info.plist是Extension app的配置文件,我们主要关心的是NSExtension这个数组
NSExtensionMainStoryboard 是扩展的sb
NSExtensionPointIdentifier 是标示这是一个什么类型的扩展,这个一般在最初创建的时候,已经固定了,基本不用更改。
3 编辑我们的图片扩展app UI
注意:不要忘记关联sb啊
4 实现 PHContentEditingController,这个在创建文件的时候,已经默认添加,主要有以下结果函数
通过简单地以上六步就能完成对photo Extension app。
选择菜单 file->new->target
2 在我们的app中会有一个独立的photo Extension app 文件
其中PhotoEditingViewController就是我们编辑图片的承载器,我们的图片展示以及代码处理都是在这里面完成,默认的使用sb创建的,而且不能更改,那些不懂sb的需要好好学习了。
info.plist是Extension app的配置文件,我们主要关心的是NSExtension这个数组
NSExtensionMainStoryboard 是扩展的sb
NSExtensionPointIdentifier 是标示这是一个什么类型的扩展,这个一般在最初创建的时候,已经固定了,基本不用更改。
3 编辑我们的图片扩展app UI
注意:不要忘记关联sb啊
4 实现 PHContentEditingController,这个在创建文件的时候,已经默认添加,主要有以下结果函数
刚进入界面的时候,我们能从这个获取到extnsion的对象和获取到图片对象,把获取的图片展示到背景图片上
- (void)startContentEditingWithInput:(PHContentEditingInput *)contentEditingInput placeholderImage:(UIImage *)placeholderImage {
self.backGroundImageView.image = placeholderImage;
CGSize newSize = [self getImageSizeFrame:placeholderImage];
self.backGroundImageView.frame = CGRectMake(0, 0, newSize.width, newSize.height);
}
5 通过coreImage对图片进行编辑
那么如何实现改变图片的image的样式呢,我们通过coreImage的方式
<span style="white-space:pre"> </span>CIFilter * filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setValue:originalImage forKey:@"inputImage"];
[filter setValue:[NSNumber numberWithFloat:5] forKey:@"inputIntensity"];
CIContext *context = [CIContext contextWithOptions:[NSDictionary dictionary]];
CIImage * ciImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:ciImage fromRect:[ciImage extent]];
UIImage * image = [UIImage imageWithCGImage:cgimg scale:1.0f orientation:UIImageOrientationUp];
CGImageRelease(cgimg);
6 保存编辑的图谱到相册
- (void)finishContentEditingWithCompletionHandler:(void (^)(PHContentEditingOutput *))completionHandler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
PHContentEditingOutput *output = [[PHContentEditingOutput alloc] initWithContentEditingInput:self.input];
NSData * archivedData = [NSKeyedArchiver archivedDataWithRootObject:self.selectedFilterName];
PHAdjustmentData * adjuestmentData = [[PHAdjustmentData alloc] initWithFormatIdentifier:@"com.grandsoft.ReadBook" formatVersion:@"1.0" data:archivedData];
output.adjustmentData = adjuestmentData;
switch (self.input.mediaType) {
case PHAssetMediaTypeImage:
{
NSURL * url = self.input.fullSizeImageURL;
int orie = self.input.fullSizeImageOrientation;
UIImage * image = [UIImage imageWithContentsOfFile:url.path];
image = [self transformedImage:image withOrientation:orie usingFilter:self.ciFilter];
NSData * receJPEGData = UIImageJPEGRepresentation(image, 0.9);
NSError * error = nil;
BOOL success = [receJPEGData writeToURL:output.renderedContentURL options:NSDataWritingAtomic error:&error];
if(success)
{
completionHandler(output);
}
else
{
completionHandler(nil);
}
break;
}
case PHAssetMediaTypeVideo:
{
break;
}
default:
break;
}
completionHandler(output);
});
}
通过简单地以上六步就能完成对photo Extension app。