实现相机拍照带水印功能 (附思路以及Demo)

先说下思路,毕竟实现过程中遇到了很多坑,分享给大家。

实现效果如下图--

效果图

右上角展示时间 年月日 公司名称 右下角展示姓名 和 当前地址 。

下面是整体思路

思路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 *)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

思路2、思路3 Demo地址

思路4 Demo地址

如果对您有帮助记得点赞哦~转载请注明出处 ~

本人个人微信公众号地址(喜欢记得关注)


实现相机拍照带水印功能 (附思路以及Demo)_第1张图片
辛小二个人微信公众号地址

你可能感兴趣的:(实现相机拍照带水印功能 (附思路以及Demo))