美文网首页橙红科技有限公司学无止境上海恩美路演
实现相机拍照带水印功能 (附思路以及Demo)

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

作者: 辛小二 | 来源:发表于2017-07-25 13:37 被阅读67次
先说下思路,毕竟实现过程中遇到了很多坑,分享给大家。

实现效果如下图--

效果图

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

下面是整体思路

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

思路2、思路3 Demo地址

思路4 Demo地址

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

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


辛小二个人微信公众号地址

相关文章

网友评论

  • cb02499c62b3:老哥有没有android完整的可以显示时间和地址的水印Demo?求发
    辛小二:@绝心爱 http://download.csdn.net/download/baiyuliang2013/8492231 这是下载地址安卓的。
    cb02499c62b3:@辛小二 好的 坐等老哥
    辛小二:@绝心爱 有,明天给你发,今天下班了

本文标题:实现相机拍照带水印功能 (附思路以及Demo)

本文链接:https://www.haomeiwen.com/subject/enlwkxtx.html