美文网首页橙红科技有限公司学无止境上海恩美路演
实现相机拍照带水印功能 (附思路以及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