上一篇我们讲解了如何使用相机或者相册,这一篇将简要讲解一下如何对之前已经选择好的相片进行美化编辑,在这里,我们只是在已有的相片上添加一些小的饰品图片来进行装饰。
二.对相片(图片)进行美化编辑或装饰添加
1.首先,需要在头文件中导入响应的文件包,
#import <QuartzCore/QuartzCore.h>//用来设置动画等动态效果时使用
#import "VCDecorations.h"//含有饰品小图片的控制器类
#import<MessageUI/MessageUI.h>//用来发送Email时使用
#import "MovableImageView.h"//之后定义的一个NSobject类,用来设置使小饰品图片可以随手指移动。
接下俩在.m文件中进行主要函数的编写。首先,要设置关于邮件发送功能的代理<MFMailComposeViewControllerDelegate>
2.设置图片显示的大小尺寸:
+ (UIImage*)imageWithImage:(UIImage*)image
scaledToSize:(CGSize)newSize;
{
UIGraphicsBeginImageContext(newSize );
[imagedrawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
UIImage*newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
returnnewImage;
}
3.关于图片编辑完成后保存图片的函数
-(UIImage *)saveImage:(UIView *)view {
CGRect mainRect= [[UIScreen mainScreen] bounds];//定义一个和手机屏幕大小相等的尺寸
UIGraphicsBeginImageContext(mainRect.size);//选择已有的图片并设置为mainRect尺寸
CGContextRef context =UIGraphicsGetCurrentContext();//设置图片的内容为当前选中的图片(相机拍摄得到或者相册中选择得到的)
[[UIColor blackColor] set];
CGContextFillRect(context, mainRect);//函数中两个参数分别为图片的内容以及图片的尺寸
[view.layer renderInContext:context];
UIImage *newImage =UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
4.因为视图出现的时候有可能上面会出现一些饰品小图片,所以应该重写一个已有函数用来设置视图将要出现之前的初始化工作:
-(void)viewWillAppear:(BOOL)animated
{//比嗾使当前这个界面出现之前做的一些初始化准备工作
[super viewWillAppear:animated];
NSLog(@"image: %@", editImage);
if (editImage != nil)
{//表示当前照片上应该出现一些饰品小图片的话,将这些小图片添加在当前照片上,再将添加有饰品的照片图片添加在主view上
[_ivEditingImage setImage:editImage];
[self.view sendSubviewToBack:_ivEditingImage];
}
if (selectingImage)
{//如果照片上已经显示了那些饰品小图片,那么这些图片是可以随手指移动的,而具体的功能在MovableImageView类中实现。
MovableImageView *iv =
[[MovableImageView alloc]
initWithImage:[AppDelegate shareDelegate].image];
[iv setUserInteractionEnabled:YES];
[self.view addSubview:iv];
}
selectingImage = NO;
}
5.当然了,我们还需要添加一个函数用来实现ios邮件发送的功能
- (IBAction)doEmailBtn:(UIBarButtonItem*)sender {
MFMailComposeViewController *mailController= [[MFMailComposeViewController alloc] init];
mailController.mailComposeDelegate = self;//先初始化一个邮件控制器类
//隐藏toolbar
for (UIView *v in[self.view subviews])
if ([v isKindOfClass:[UIToolbarclass]])
[v setHidden:YES];
UIImage *i = [selfsaveImage:self.view];
//显示toolbar
for (UIView *v in[self.view subviews])
if ([v isKindOfClass:[UIToolbarclass]])
[v setHidden:NO];
NSData*imageAsData = UIImagePNGRepresentation(i);//设置要传送的数据为一张图片,也就是之前编辑好的图片
[mailControlleraddAttachmentData:imageAsData mimeType:@"image/png" fileName:@"PicDecor.png"];//添加发送主题和文件按名字
[mailControllersetSubject:@"My PicDecor Image"];//添加邮件标题
[self presentViewController:mailControlleranimated:YES completion:^{
}];
//执行完之后,系统会自动跳转到手机ios系统自带的邮件发送程序中选择发送
}