绘制图像既可以重写drawRect:方法并在该方法中绘制,也可以不用重写该方法,它有封装好的函数获取自己的图像绘制上下文,即UIGraphicsBeginImageContext(CGSize size)和UIGraphicsEndImageContext(),有了它们,不在需要重写drawRect:方法,就可以在其他任何方法中绘制图像。

具体的实例如下:

步骤:

1、布局故事板,在里面添加一个合适大小的imageView,另外再拖入三个按钮,分别用来完成绘图、给图像加水印、保存的功能,同时拖入需要图像素材。

  

2、对这些控件进行IBOutLet关联到控制器类ViewController中,声明属性或功能

3、分别开始各自功能实现

<1>点击绘图按钮开始绘制图片

- (IBAction)drawImage:(UIButton *)sender
{
//开始图像绘制的上下文
UIGraphicsBeginImageContext(self.imageView.frame.size); //获取当前图形绘制的上下文
CGContextRef context = UIGraphicsGetCurrentContext(); //绘制一个矩形
CGContextAddRect(context, CGRectMake(, , , )); //设置绘制属性
[[UIColor redColor]set]; //绘制路径
CGContextDrawPath(context, kCGPathEOFillStroke); //从图像绘制上下文获取图片
self.image = UIGraphicsGetImageFromCurrentImageContext(); //结束图像绘制的上下文
UIGraphicsEndImageContext(); //显示图像绘制的上下文
[self.imageView setImage:self.image];
}

绘制的图片截图为:

<2>点击加水印按钮开始绘制图像并添加水印

- (IBAction)addWaterMark:(UIButton *)sender
{
//开始图形绘制上下文
UIGraphicsBeginImageContext(self.imageView.frame.size); //绘制图片
UIImage *imageface = [UIImage imageNamed:@""];
[imageface drawInRect:self.imageView.bounds]; //绘制水印
NSString *str = @"Wellcome to BeiJing";
[str drawAtPoint:CGPointMake(, ) withAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:]}]; //从当前上下文获取图片
self.image = UIGraphicsGetImageFromCurrentImageContext(); //结束图像绘制上下文
UIGraphicsEndImageContext(); //显示带水印的图片
[self.imageView setImage:self.image];
}

绘制的带文字水印的图像截图为:

<3>点击保存按钮将添加过水印的图像保存到沙盒目录下或系统的相机相册下

- (IBAction)saveImage:(UIButton *)sender
{
// //设置图片保存的路径
// NSArray *documents = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *doucument = [documents lastObject];
// NSLog(@"%@",doucument);
//
// //拼接文件路径
// NSString *fileName = [doucument stringByAppendingPathComponent:@"watermark.png"];
//
// //获取图片中的data
// NSData *imageData = UIImagePNGRepresentation(self.image);
//
// //将图片数据写入沙盒文件保存起来
// [imageData writeToFile:fileName atomically:YES]; //保存到相册
UIImageWriteToSavedPhotosAlbum(self.image, nil, nil, nil);
}

保存到相机相册下和沙盒目录下的图像截图为:

   

iOS:quartz2D绘图(处理图像,绘制图像并添加水印)的更多相关文章

  1. iOS:quartz2D绘图(显示绘制在PDF上的图片)

    quart2D既可以用来绘制图像到pdf上,也可以从pdf上读取图像并显示出来.在使用这种方式之前,还有一种方式可以用来读取显示pdf上的图像,即使用UIWebView网页视图控件- (void)lo ...

  2. iOS:quartz2D绘图 (动画)

    quartz2D可以用来绘制自己需要的图形,它们绘制出来的是一个静态的图形,那么如何绘制一个动态的图形呢?动态的图形就是动画,所谓动画,其实就是很多张图片在短时间内不停的切换所产生的一种视觉效果.qu ...

  3. IOS第16天(1,Quartz2D基本图像绘制)

    ***************基本图像绘制 画线 #import "HMLineView.h" @implementation HMLineView - (id)initWithF ...

  4. iOS:quartz2D绘图

    Quartz-2D:绘图 一.介绍: •Quartz 2D是一个二维图形绘制引擎,支持iOS环境和Mac OS X环境   •Quartz 2D API可以实现许多功能,如基于路径的绘图.透明度.阴影 ...

  5. iOS:quartz2D绘图小项目(涂鸦画板)

    介绍:学了quartz2D的绘图知识后,我根据它的一些功能制作了一个小项目:涂鸦画板. 功能:绘制各种图形,还可以选取相册上的照片做涂鸦,然后保存到相册中.其中,还包括功能有:颜色的选取.线宽的选取. ...

  6. iOS:quartz2D绘图(画一些简单的图形,如直线、三角形、圆、矩形、文字等)

    前一篇几乎已经详细介绍了Quartz2D的所有知识,这一篇以及后面就不废话了,主要是用具体的实例来演示绘图效果. 这里我们先来绘制一些简单的图形(如直线.三角形.圆.矩形.文字.图像),它有两种方式可 ...

  7. Linear regression with one variable算法实例讲解(绘制图像,cost_Function ,Gradient Desent, 拟合曲线, 轮廓图绘制)_矩阵操作

    %测试数据 'ex1data1.txt', 第一列为 population of City in 10,000s, 第二列为 Profit in $10,000s 1 6.1101,17.592 5. ...

  8. Javascript高级编程学习笔记(90)—— Canvas(7) 绘制图像

    绘制图像 2D绘图上下文内置了对图像的支持 如果希望将一幅图绘制到画布上,可以使用 drawImage() 的方法 该方法有三种不同的参数数组合以对应不同的应用场景 将<img>绘制到画布 ...

  9. iOS学习——Quartz2D学习之UIKit绘制

    iOS学习——Quartz2D学习之UIKit绘制 1.总述 在IOS中绘图技术主要包括:UIKit.Quartz 2D.Core Animation和OpenGL ES.其中Core Animati ...

随机推荐

  1. rabbitmq在centos7下安装

    知识预览 一. RabbitMQ队列 二. 事例 三.基于RabbitMQ的RPC 回到顶部 一. RabbitMQ队列 ? 1 2 3 4 5 #消息中间件 -消息队列   - 异步 提交的任务不需 ...

  2. AC日记——[HNOI2010]BOUNCE 弹飞绵羊 洛谷 P3203

    [HNOI2010]BOUNCE 弹飞绵羊 思路: SBlct: 代码: #include <bits/stdc++.h> using namespace std; #define max ...

  3. Entity Framework中使用DbCompiledModel中遇到的坑和解决方案

    前段时间,在公司做项目时,引入Entity Framework Code First的方法. 我们公司的软件为SaaS结构,有N个企业注册,其中SQL Server中有一张表为t_User_企业注册号 ...

  4. windows10 自带的OpenSSH Client(Beta)

    我不知道其他版本有没有 ,我是windows10 专业版,版本1709,OS内部版本16288.1 安装过程: 1.我的电脑上面的卸载或更改程序 2.管理可选功能 3.添加功能 4.重启电脑,搞定 O ...

  5. 四十七 常用内建模块 XML

    XML虽然比JSON复杂,在Web中应用也不如以前多了,不过仍有很多地方在用,所以,有必要了解如何操作XML. DOM vs SAX 操作XML有两种方法:DOM和SAX.DOM会把整个XML读入内存 ...

  6. react native 增加react-native-camera

    前提:已经正常运行的项目 第一步:使用命令加入react-native-camera,并且关联react-native-camera, yarn add react-native-camera rea ...

  7. hihoCoder #1871 : Heshen's Account Book-字符串暴力模拟 自闭(getline()函数) (ACM-ICPC Asia Beijing Regional Contest 2018 Reproduction B) 2018 ICPC 北京区域赛现场赛B

    P2 : Heshen's Account Book Time Limit:1000ms Case Time Limit:1000ms Memory Limit:512MB Description H ...

  8. POJ 1089 Intervals【合并n个区间/贪心】

    There is given the series of n closed intervals [ai; bi], where i=1,2,...,n. The sum of those interv ...

  9. BZOJ2654/COGS1764 [2012国家集训队]tree(陈立杰) [生成树,二分]

    BZOJ传送门,COGS传送门 tree Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V, ...

  10. spring boot简单入门

    1.创建mave工程(jar) 2.pom文件引入依赖 <!--引入父依赖--> <parent> <groupId>org.springframework.boo ...