先说下思路,毕竟实现过程中遇到了很多坑,分享给大家。
实现效果如下图--
效果图右上角展示时间 年月日 公司名称 右下角展示姓名 和 当前地址 。
下面是整体思路
思路1、在系统UIImagePickerController上放置试图实现效果(但是后来发现UIImagePickerController上是无法添加试图的所以这个思路推翻)
思路2、在[UIApplication sharedApplication].keyWindow上添加试图,然后将试图按照机型调整成中间相机大小即可,再往试图上放置label和图片,在通过按照机型大小截屏的方式获取到这张水印图片。
思路2中需要注意的事项如下--
1、苹果对于截屏是不仅仅可以截取整平大小的视图,可以直接截取指定大小的视图
/*截屏功能 整屏截取*/
-(UIImage *)captureScreenForView:(UIView *)currentView {
//UIGraphicsBeginImageContext(self.view.frame.size);
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0);
[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
/*截屏指定View */
-(UIImage *)captureScreenForView:(UIView *)currentView {
//UIGraphicsBeginImageContext(currentView.frame.size);
UIGraphicsBeginImageContextWithOptions(self.BView.bounds.size, YES, 0.0);
[currentView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return viewImage;
}
2、截屏之后可能会导致图片像素变低,这个是因为你使用的方法已经被弃用。
7.0之前方法
//UIGraphicsBeginImageContext(self.view.frame.size);
7.0之后方法 更换之后 截屏的像素即可正常。
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, YES, 0.0);
3、截屏需要将picker.allowsEditing = NO; //不可编辑
allowsEditing属性需要设置为NO,否则会影响截屏效果。
思路3 、基于思路2的基础上我们可以不使用截屏的方式获取到这张图片,我们可以先获取到系统正常拍照获取到的image,然后通过对image的绘制达到你想要的图片效果。
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary<NSString *,id> *)editingInfo NS_DEPRECATED_IOS(2_0, 3_0)
{
NSLog(@"finish..");
if(picker.sourceType == UIImagePickerControllerSourceTypeCamera)
{
/*这个image就是系统拍照下来的图片,我们获取到它之后因为系统拍照是无法获取到它上面视图的,我们就需要在它上面进行渲染和添加文字 之后就是水印图片了*/
self.imageView.image = image ;
/*把图片存到相册中*/
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
}
/*取消隐藏*/
self.BView.hidden = YES;
[self dismissViewControllerAnimated:YES completion:nil];
}
思路4、对UIImagePickerController自定义封装,这里推荐大家使用TZImagePickerController这个第三方框架,原文作者写的很详细里面实现了水印效果。
附Demo
如果对您有帮助记得点赞哦~转载请注明出处 ~
本人个人微信公众号地址(喜欢记得关注😯)
辛小二个人微信公众号地址
网友评论