//  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-图片水印-裁剪-截屏-截取-擦除相关推荐

  1. java批量上传图片源码_java 图片批量裁剪 源代码

    java 图片批量裁剪 源代码 package com.frank.dx; import java.awt.Image; import java.awt.Rectangle; import java. ...

  2. 结合源码探讨Android距离传感器亮灭屏机制

    结合源码探讨Android距离传感器亮灭屏机制 本文的分析是基于Android 5.0.0 Google原生代码的. Android中的距离传感器,也就是P-sensors(Proximity Sen ...

  3. 用html语言编写美食栏目 源码,仿美食网首页html+css 完全源码和图片

    [实例简介] 用了一个多星期仿的美食网的首页,html和css分离,完整的源码及图片: [实例截图] [核心代码] kikibingo_6821075 └── 仿美食网首页html+css 完全源码和 ...

  4. 连连看(源码及图片素材)

    @连连看(源码及图片素材) 连连看(源码及图片素材) 首先声明一下,我不是计算机专业的人,这是我大二上程设课的大作业,第一次做游戏,当时会的东西不多很焦虑,不知道该怎么开始第一步.开始前搜了很多东西, ...

  5. 小程序源码:强大的多功能图片处理器微信小程序源码下载图片画框合成-多玩法安装简单

    大家好这是以开以图片为主题的一款小程序 里面拥有了多种的图片处理功能,也算是比较强大的一款 另外小编最喜欢的就是里面的图片画框合成这个功能 该功能里面有N种画框模板,然后画框的尺寸根据您的图片自适应处 ...

  6. 短视频系统源码,布局旋转 横屏竖屏

    短视频系统源码,布局旋转 横屏竖屏实现的相关代码 横屏 竖屏 *注意在setContentView()之前 if(this.getResources().getConfiguration().orie ...

  7. php读取图片文件流,详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等)...

    详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 1.png (21.16 KB, 下载次数: ...

  8. include详解 shell_详解php文件包含原理(读取文件源码、图片马、各种协议、远程getshell等) ......

    详解php文件包含原理(读取文件源码.图片马.各种协议.远程getshell等) 作者是namezz (看完图相当于做了一轮实验系列) 现有文件代码如下 include和include_once.re ...

  9. 小程序源码:图片拼图微信小程序源码下载

    该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码下载- ...

  10. 小程序源码:图片拼图微信小程序源码-多玩法安装简单

    该款小程序支持多种流量主 另外支持多种图形模板制作切割 另外也支持长图合成等功能 安装简单,新手容易上手,具体就不多说了大家自行研究吧! 小程序源码下载地址: 小程序源码:图片拼图微信小程序源码-多玩 ...

最新文章

  1. C++ 继承过程中使用访问说明符和虚函数
  2. Javascript之链式运动框架1
  3. FCN 学习: Semantic Segmentation
  4. Neo4j简单的样例
  5. Centos7.x/redhat7.x修改网卡名称
  6. apache-cxf 使用_使用Apache CXF进行Web服务学习
  7. arduino 停止程序_极路由1S OpenWrt开机自启程序及串口调试
  8. hololens 仿真器安装更改位置_HoloLens开发指南(1)---安装工具
  9. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  10. php 模拟客户端访问,PHP通过伪造和模拟客户端COOKIE登陆来采集抓取远程网址
  11. hbase权威指南-客户端API高级特性
  12. 【Python入门教程】第04篇 Hello World程序
  13. 现代数字图像处理技术提高及应用案例详解
  14. win10屏幕文字模糊不清
  15. NeoKylin-Server使用docker部署跨主机redis集群
  16. 断开现有的网络共享映射_彭世瑜_新浪博客
  17. 会php学java入门要多久_php自学需要多久
  18. 昨天在洛阳,也就是阴历十月一日,晚上有在自家门前烧纸的,有点好奇,今天知道了
  19. vimium 成神之路-键盘党的胜利
  20. [渝粤教育] 西北工业大学 复变函数与积分变换 参考 资料

热门文章

  1. mysql 关注 表设计_mysql - 新浪微博中的关注功能是如何设计表结构的?
  2. JSON格式转int/long报错
  3. Python 接收CMD返回
  4. 在Jenkins中Svn Publisher插件的使用
  5. NYOJ 光棍的yy
  6. .fasta | .fastq | seq-kit | fastq | fastp | conda
  7. ABB机器人学习笔记1-软件使用
  8. JS对URL进行编码和解码
  9. 国内很好的IT学习网站
  10. SPR4: 依赖注入的三种方式