iOS:quartz2D绘图(处理图像,绘制图像并添加水印)

简介:

绘制图像既可以重写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(100, 100, 100, 100));
    
    //设置绘制属性
    [[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:@"2"];
    [imageface drawInRect:self.imageView.bounds];
    
    //绘制水印
    NSString *str = @"Wellcome to BeiJing";
    [str drawAtPoint:CGPointMake(50, 40) withAttributes:@{NSForegroundColorAttributeName:[UIColor blackColor],NSFontAttributeName:[UIFont systemFontOfSize:18]}];
    
    //从当前上下文获取图片
    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高级

本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4869182.html,如需转载请自行联系原作者
相关文章
|
算法 API iOS开发
iOS MachineLearning 系列(3)—— 静态图像分析之区域识别
本系列的前一篇文章介绍了如何使用iOS中自带的API对图片中的矩形区域进行分析。在图像静态分析方面,矩形区域分析是非常基础的部分。API还提供了更多面向应用的分析能力,如文本区域分析,条形码二维码的分析,人脸区域分析,人体分析等。本篇文章主要介绍这些分析API的应用。
286 0
|
人工智能 文字识别 API
iOS MachineLearning 系列(4)—— 静态图像分析之物体识别与分类
本系列的前几篇文件,详细了介绍了Vision框架中关于静态图片区域识别的内容。本篇文章,我们将着重介绍静态图片中物体的识别与分类。物体识别和分类也是Machine Learning领域重要的应用。通过大量的图片数据进行训练后,模型可以轻易的分析出图片的属性以及图片中物体的属性。
369 0
|
存储 缓存 iOS开发
iOS 轻量化动态图像下载缓存框架实现
日常开发过程中,图片的下载会占用大量的带宽,图片的加载会消耗大量的性能和内存,正确的使用图片显得尤为重要。 同样也经常需要在各类型控件上读取网络图片和处理本地图片,例如:UIImageView、UIBtton、NSImageView、NSButton等等。
iOS 轻量化动态图像下载缓存框架实现
|
人工智能 API iOS开发
iOS MachineLearning 系列(2)—— 静态图像分析之矩形识别
本系列文章将完整的介绍iOS中Machine Learning相关技术的应用。本篇文章开始,我们将先介绍一些与Machine Learning相关的API的应用。使用这些API可以快速方便的实现很多如图像识别,分析等复杂功能,且不会增加应用安装包的体积。
268 0
|
算法 计算机视觉 iOS开发
iOS使用OpenCV之图像融合(二)
iOS使用OpenCV之图像融合(二)
iOS使用OpenCV之图像融合(二)
|
iOS开发
iOS开发-聊天气泡的绘制和聊天消息列表
iOS开发-聊天气泡的绘制和聊天消息列表
244 0
iOS开发-聊天气泡的绘制和聊天消息列表
|
JSON 搜索推荐 Serverless
iOS绘制物理按钮 - 透明圆角渐变边框
iOS绘制物理按钮 - 透明圆角渐变边框
388 0
iOS绘制物理按钮 - 透明圆角渐变边框
|
缓存 编解码 并行计算
iOS 开发:绘制像素到屏幕
像素是如何绘制到屏幕上面的?把数据输出到屏幕的方法有很多,通过调用很多不同的framework和不同的函数。这里我们讲一下这个过程背后的东西。希望能够帮助大家了解什么时候该使用什么API,特别是当遇到性能问题需要调试的时候。当然,我们这里主要讲iOS,但是事实上,很多东西也是可以应用到OSX上面的。
320 0
iOS 开发:绘制像素到屏幕
|
iOS开发
iOS开发UI篇—Quartz2D(自定义UIImageView控件)
iOS开发UI篇—Quartz2D(自定义UIImageView控件) 一、实现思路 Quartz2D最大的用途在于自定义View(自定义UI控件),当系统的View不能满足我们使用需求的时候,自定义View。
806 0
|
iOS开发
iOS开发UI篇—Quartz2D简单使用(二)
iOS开发UI篇—Quartz2D简单使用(二) 一、画文字 代码: 1 // 2 // YYtextview.m 3 // 04-写文字 4 // 5 // Created by 孔医己 on 14-6-10.
690 0