源码0301-图片水印-裁剪-截屏-截取-擦除
// ViewController.m // 01-图片水印 #import "ViewController.h"// 在图片的基础绘制一些文字或者Logo,最终生成一张图片 @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.// 加载图片UIImage *image = [UIImage imageNamed:@"小黄人"];// 0.获取上下文,之前的上下文都是在view的drawRect方法中获取(跟View相关联的上下文layer上下文)// 目前我们需要绘制图片到新的图片上,因此需要用到位图上下文// 怎么获取位图上下文,注意位图上下文的获取方式跟layer上下文不一样。位图上下文需要我们手动创建。// 开启一个位图上下文,注意位图上下文跟view无关联,所以不需要在drawRect.// size:位图上下文的尺寸(新图片的尺寸)// opaque: 不透明度 YES:不透明 NO:透明,通常我们一般都弄透明的上下文// scale:通常不需要缩放上下文,取值为0,表示不缩放UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);// 1.获取上下文(位图上下文)CGContextRef ctx = UIGraphicsGetCurrentContext();// 2.描述路径CGContextMoveToPoint(ctx, 50, 50);CGContextAddLineToPoint(ctx, 200, 200);[[UIColor redColor] set];// 3.渲染上下文 CGContextStrokePath(ctx);// UIBezierPath *path =[UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, 300, 300)]; // // [[UIColor redColor] set]; // [path stroke];// // 1.绘制原生的图片 // [image drawAtPoint:CGPointZero]; // // // 2.给原生的图片添加文字 // NSString *str = @"小码哥"; // // // 创建字典属性 // NSMutableDictionary *dict = [NSMutableDictionary dictionary]; // dict[NSForegroundColorAttributeName] = [UIColor redColor]; // dict[NSFontAttributeName] = [UIFont systemFontOfSize:20]; // // [str drawAtPoint:CGPointMake(200, 528) withAttributes:dict];// 3.生成一张图片给我们,从上下文中获取图片UIImage *imageWater = UIGraphicsGetImageFromCurrentImageContext();// 4.关闭上下文 // UIGraphicsEndImageContext(); _imageView.image = imageWater;}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end
02-图片裁剪
// ViewController.m // 02-图片裁剪 #import "ViewController.h" #import "UIImage+Image.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.// 图片裁剪:把正方形图片重新生产一张圆形的图片// 图片裁剪 UIImage *image = [UIImage imageWithClipImage:[UIImage imageNamed:@"阿狸头像"] borderWidth:1 borderColor:[UIColor redColor]];_imageView.image = image; }- (void)clipImage {// 0.加载图片UIImage *image = [UIImage imageNamed:@"阿狸头像"];// 1.开启位图上下文,跟图片尺寸一样大UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);// 2.设置圆形裁剪区域,正切与图片// 2.1创建圆形的路径UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, image.size.width, image.size.height)];// 2.2把路径设置为裁剪区域 [path addClip];// 3.绘制图片 [image drawAtPoint:CGPointZero];// 4.从上下文中获取图片UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();// 5.关闭上下文 UIGraphicsEndImageContext();_imageView.image = clipImage; }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end
图片裁切
// UIImage+Image.h // 02-图片裁剪 #import <UIKit/UIKit.h>@interface UIImage (Image) + (UIImage *)imageWithClipImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)color; @end
// UIImage+Image.m // 02-图片裁剪 #import "UIImage+Image.h"@implementation UIImage (Image) + (UIImage *)imageWithClipImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)color {// 图片的宽度和高度CGFloat imageWH = image.size.width;// 设置圆环的宽度CGFloat border = borderWidth;// 圆形的宽度和高度CGFloat ovalWH = imageWH + 2 * border;// 1.开启上下文UIGraphicsBeginImageContextWithOptions(CGSizeMake(ovalWH, ovalWH), NO, 0);// 2.画大圆UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, ovalWH, ovalWH)];[color set];[path fill];// 3.设置裁剪区域UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(border, border, imageWH, imageWH)];[clipPath addClip];// 4.绘制图片 [image drawAtPoint:CGPointMake(border, border)];// 5.获取图片UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();// 6.关闭上下文 UIGraphicsEndImageContext();return clipImage;}@end
图片截屏
// ViewController.m // 03-屏幕截屏 #import "ViewController.h"#import "UIImage+Image.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.// 生成一张新的图片 UIImage *image = [UIImage imageWithCaputureView:self.view];// image转data// compressionQuality: 图片质量 1:最高质量 NSData *data = UIImageJPEGRepresentation(image,1);[data writeToFile:@"/Users/xiaomage/Desktop/view.png" atomically:YES];}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end
// UIImage+Image.h // 02-图片裁剪 #import <UIKit/UIKit.h>@interface UIImage (Image) // 圆形裁剪 + (UIImage *)imageWithClipImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)color;// 控件截屏 + (UIImage *)imageWithCaputureView:(UIView *)view;@end
// UIImage+Image.m // 02-图片裁剪 #import "UIImage+Image.h"@implementation UIImage (Image) + (UIImage *)imageWithClipImage:(UIImage *)image borderWidth:(CGFloat)borderWidth borderColor:(UIColor *)color {// 图片的宽度和高度CGFloat imageWH = image.size.width;// 设置圆环的宽度CGFloat border = borderWidth;// 圆形的宽度和高度CGFloat ovalWH = imageWH + 2 * border;// 1.开启上下文UIGraphicsBeginImageContextWithOptions(CGSizeMake(ovalWH, ovalWH), NO, 0);// 2.画大圆UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, ovalWH, ovalWH)];[color set];[path fill];// 3.设置裁剪区域UIBezierPath *clipPath = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(border, border, imageWH, imageWH)];[clipPath addClip];// 4.绘制图片 [image drawAtPoint:CGPointMake(border, border)];// 5.获取图片UIImage *clipImage = UIGraphicsGetImageFromCurrentImageContext();// 6.关闭上下文 UIGraphicsEndImageContext();return clipImage;}+ (UIImage *)imageWithCaputureView:(UIView *)view {// 开启位图上下文UIGraphicsBeginImageContextWithOptions(view.bounds.size, NO, 0);// 获取上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 把控件上的图层渲染到上下文,layer只能渲染 [view.layer renderInContext:ctx];// 生成一张图片UIImage *image = UIGraphicsGetImageFromCurrentImageContext();// 关闭上下文 UIGraphicsEndImageContext();return image; }@end
04-图片截取
// ViewController.m // 04-图片截取 #import "ViewController.h"@interface ViewController ()@property (nonatomic, assign) CGPoint startP;@property (weak, nonatomic) IBOutlet UIImageView *imageV; @property (nonatomic, weak) UIView *clipView;@end@implementation ViewController- (UIView *)clipView{if (_clipView == nil) {UIView *view = [[UIView alloc] init];_clipView = view;view.backgroundColor = [UIColor blackColor];view.alpha = 0.5;[self.view addSubview:view];}return _clipView; }- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.// 给控制器的view添加一个pan手势UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];[self.view addGestureRecognizer:pan]; }- (void)pan:(UIPanGestureRecognizer *)pan {CGPoint endA = CGPointZero;if (pan.state == UIGestureRecognizerStateBegan) { // 一开始拖动的时候// 获取一开始触摸点_startP = [pan locationInView:self.view];}else if(pan.state == UIGestureRecognizerStateChanged){ // 一直拖动// 获取结束点endA = [pan locationInView:self.view];CGFloat w = endA.x - _startP.x;CGFloat h = endA.y - _startP.y;// 获取截取范围CGRect clipRect = CGRectMake(_startP.x, _startP.y, w, h);// 生成截屏的viewself.clipView.frame = clipRect;}else if (pan.state == UIGestureRecognizerStateEnded){// 图片裁剪,生成一张新的图片// 开启上下文// 如果不透明,默认超出裁剪区域会变成黑色,通常都是透明UIGraphicsBeginImageContextWithOptions(_imageV.bounds.size, NO, 0);// 设置裁剪区域UIBezierPath *path = [UIBezierPath bezierPathWithRect:_clipView.frame];[path addClip];// 获取上下文CGContextRef ctx = UIGraphicsGetCurrentContext();// 把控件上的内容渲染到上下文 [_imageV.layer renderInContext:ctx];// 生成一张新的图片_imageV.image = UIGraphicsGetImageFromCurrentImageContext();// 关闭上下文 UIGraphicsEndImageContext();// 先移除 [_clipView removeFromSuperview];// 截取的view设置为nil_clipView = nil;}// 获取手指的偏移量 // pan translationInView:<#(UIView *)#> }- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end
05-图片擦除
// // ViewController.m // 05-图片擦除 #import "ViewController.h"@interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib. UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];[self.view addGestureRecognizer:pan]; }- (void)pan:(UIPanGestureRecognizer *)pan {// 获取当前点CGPoint curP = [pan locationInView:self.view];// 获取擦除的矩形范围CGFloat wh = 100;CGFloat x = curP.x - wh * 0.5;CGFloat y = curP.y - wh * 0.5;CGRect rect = CGRectMake(x, y, wh, wh);// 开启上下文UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0);CGContextRef ctx = UIGraphicsGetCurrentContext();// 控件的layer渲染上去 [_imageView.layer renderInContext:ctx];// 擦除图片 CGContextClearRect(ctx, rect);// 生成一张图片UIImage *image = UIGraphicsGetImageFromCurrentImageContext();_imageView.image = image;// 关闭上下文 UIGraphicsEndImageContext();} - (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated. }@end
转载于:https://www.cnblogs.com/laugh/p/6677594.html
源码0301-图片水印-裁剪-截屏-截取-擦除相关推荐
- java批量上传图片源码_java 图片批量裁剪 源代码
java 图片批量裁剪 源代码 package com.frank.dx; import java.awt.Image; import java.awt.Rectangle; import java. ...
- 结合源码探讨Android距离传感器亮灭屏机制
结合源码探讨Android距离传感器亮灭屏机制 本文的分析是基于Android 5.0.0 Google原生代码的. Android中的距离传感器,也就是P-sensors(Proximity Sen ...
- 用html语言编写美食栏目 源码,仿美食网首页html+css 完全源码和图片
[实例简介] 用了一个多星期仿的美食网的首页,html和css分离,完整的源码及图片: [实例截图] [核心代码] kikibingo_6821075 └── 仿美食网首页html+css 完全源码和 ...
- 连连看(源码及图片素材)
@连连看(源码及图片素材) 连连看(源码及图片素材) 首先声明一下,我不是计算机专业的人,这是我大二上程设课的大作业,第一次做游戏,当时会的东西不多很焦虑,不知道该怎么开始第一步.开始前搜了很多东西, ...
- 小程序源码:强大的多功能图片处理器微信小程序源码下载图片画框合成-多玩法安装简单
大家好这是以开以图片为主题的一款小程序 里面拥有了多种的图片处理功能,也算是比较强大的一款 另外小编最喜欢的就是里面的图片画框合成这个功能 该功能里面有N种画框模板,然后画框的尺寸根据您的图片自适应处 ...
- 短视频系统源码,布局旋转 横屏竖屏
短视频系统源码,布局旋转 横屏竖屏实现的相关代码 横屏 竖屏 *注意在setContentView()之前 if(this.getResources().getConfiguration().orie ...
- php读取图片文件流,详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等)...
详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 1.png (21.16 KB, 下载次数: ...
- include详解 shell_详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等) ......
详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 include和include_once.re ...
- 小程序源码:图片拼图微信小程序源码下载
该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码下载- ...
- 小程序源码:图片拼图微信小程序源码-多玩法安装简单
该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码-多玩 ...
最新文章
- C++ 继承过程中使用访问说明符和虚函数
- Javascript之链式运动框架1
- FCN 学习: Semantic Segmentation
- Neo4j简单的样例
- Centos7.x/redhat7.x修改网卡名称
- apache-cxf 使用_使用Apache CXF进行Web服务学习
- arduino 停止程序_极路由1S OpenWrt开机自启程序及串口调试
- hololens 仿真器安装更改位置_HoloLens开发指南(1)---安装工具
- Java Web学习总结(33)——Java Web 程序员如何转型大数据
- php 模拟客户端访问,PHP通过伪造和模拟客户端COOKIE登陆来采集抓取远程网址
- hbase权威指南-客户端API高级特性
- 【Python入门教程】第04篇 Hello World程序
- 现代数字图像处理技术提高及应用案例详解
- win10屏幕文字模糊不清
- NeoKylin-Server使用docker部署跨主机redis集群
- 断开现有的网络共享映射_彭世瑜_新浪博客
- 会php学java入门要多久_php自学需要多久
- 昨天在洛阳,也就是阴历十月一日,晚上有在自家门前烧纸的,有点好奇,今天知道了
- vimium 成神之路-键盘党的胜利
- [渝粤教育] 西北工业大学 复变函数与积分变换 参考 资料