zoukankan      html  css  js  c++  java
  • iOS开发Quarz2D 九:图片加水印

    #import "ViewController.h"
    
    @interface ViewController ()
    @property (weak, nonatomic) IBOutlet UIImageView *imageV;
    
    @end
    
    @implementation ViewController
    /**
     *    注意:1:位图也就是图片的上下文,必须手动去开启,手动去关闭,而view的图形上下文,在drawRect方法中系统已经自动生成,由系统自动去管理图形上下文。2:[image drawAtPoint:CGPointZero];drawAtPoint,图片有多大,就绘制多大,drawRect,外界的父控件有多大,图片就会填充整个父控件
     */
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        //0.加载图片
        UIImage *image = [UIImage imageNamed:@"阿狸头像"];
        //1.开启一个跟图片原始大小的上下文
        //opaque:不透明度,参数传0,默认根据屏幕的分辨率去设置具体的数值
        UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);
        //2.把图片绘制到上下文当中
        [image drawAtPoint:CGPointZero];
        //3.把文字绘制到上下文当中
        NSString *str = @"小码哥";
        [str drawAtPoint:CGPointMake(10, 20) withAttributes:nil];
        //4.从上下文当中生成一张图片.(把上下文当中绘制的所有内容,生成一张图片)
        UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
        //5.关闭上下文.
        UIGraphicsEndImageContext();
        
        self.imageV.image = newImage;
        
    
    }
    
    @end

     给图片水印的目的:

    告诉别人图片的来源.

    防止别人盗用图片.打广告.

     

    添加水印它最终是生成了一个新的图片.

    生成图片要用到了图片上下文.不需要再去自定义View,

    之前一直在自定义View,是因为要拿跟View相关联的上下文.

    跟View相关联的上下文是系统自动帮我们创建的,所以不需要我们自己手动创建,

    但是图片上下文需要我们自己去手动创建.还需要我们自己手动去关闭.

     

    实现水印效果的思路:

    开启一个和原始图片一样的图片上下文.

    把原始图片先绘制到图片上下文.

    再把要添加的水印(文字,logo)等绘制到图片上下文.

    最后从上下文中取出一张图片.

    关闭图片上下文.

    1.如何开启一个图片上下文?

        size:开启多大的上文

        opaque:不透明度

        scale:缩放上下文.

        UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);

         

         2.如何从图片上下文当中生成一张图片?

         UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

         

         3.如何关闭上下文?

         UIGraphicsEndImageContext();

  • 相关阅读:
    wgcloud问题处理——被监控的客户机掉线
    WGCLOUD下发指令时候如何屏蔽linux敏感字符
    WGCLOUD左侧菜单如何保持展开状态
    zerotier 实现 minecraft 局域网联机 | 我的世界联机教程 | minecraft联机
    [ UVa 12096 详解] The Set Stack Computer 集合栈计算机 | map、set、vector、stack、宏函数等知识点简单应用
    [ Uva 101 详解 ] the block problem 木块问题
    Python操作数据库基本操作-sqlalchemy
    统计目录下程序源程序的行数之和-Python
    凯撒密码C++实现
    【题解】[AGC036F] Square Constraints
  • 原文地址:https://www.cnblogs.com/cqb-learner/p/5821977.html
Copyright © 2011-2022 走看看