1、图片水印

//layer上下文只能显示在drawRect里

//当开启上下文时,绘制图形即可在viewDidLoad中实现

//位图的上下文

//UIGraphicsBeginImageContext()仅适用于非retina屏

//开启位图上下文

size:位图的尺寸

opaque:不透明是yes,透明就是no

scale:是否缩放上下文

UIGraphicsBeginImageContextWithOptions(image.size, NO, 0);

//绘制原始图片

[image drawAtPoint:CGPointZero];

[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];

//第一种

NSString * info = @"@大欢";

NSDictionary * dict = @{NSForegroundColorAttributeName:[UIColor whiteColor],

NSFontAttributeName:[UIFont systemFontOfSize:30]};

[info drawAtPoint:CGPointMake(120, 200) withAttributes:dict];

//第二种

UIBezierPath * path = [UIBezierPath bezierPathWithRect:CGRectMake(100, 100, 100, 100)];

[[UIColor redColor] set];

[path fill];

//第三种

CGContextRef ctx = UIGraphicsGetCurrentContext();

CGContextMoveToPoint(ctx, 20, 20);

CGContextAddLineToPoint(ctx, 40, 40);

CGContextStrokePath(ctx);

//生成一张新的图片,从位图上下文获取

UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();

//关闭图片上下文

UIGraphicsEndImageContext();

self.imageView.image = newImage;

2、图片等比例缩小

操作 写在 通过上下文获取图片 之前

UIImage * image = [UIImage imageNamed:@"huoyanshan.jpg"];

CGFloat newImageWH = image.size.height;

//开启位图上下文

UIGraphicsBeginImageContextWithOptions(CGSizeMake(newImageWH, newImageWH), NO, 0);

UIBezierPath * path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, newImageWH, newImageWH)];

//添加剪切

[path addClip];

//绘图

[image drawAtPoint:CGPointZero];

//通过上下文获取图片

UIImage * newImage = UIGraphicsGetImageFromCurrentImageContext();

//关闭上下文

UIGraphicsEndImageContext();

self.imageView.image = newImage;

3、画线

//纯代码执行的第一个方法

- (instancetype)initWithFrame:(CGRect)frame

{

self = [super initWithFrame:frame];

if (self) {

[self setUp];

}

return self;

}

//故事板执行的第一个方法

- (void)awakeFromNib {

[self setUp];

}

4、相册

//保存到手机相册

UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

//创建相册

UIImagePickerController * imagePicker = [[UIImagePickerController alloc] init];

<UINavigationControllerDelegate, UIImagePickerControllerDelegate>写两个协议

imagePicker.delegate = self;

//UIImagePickerControllerSourceTypePhotoLibrary 相册

//UIImagePickerControllerSourceTypeCamera 相机

imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

//允许编辑

imagePicker.allowsEditing = YES;

[self presentViewController:imagePicker animated:YES completion:nil];

}

//相册选择完成的方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {

//编辑图片 如果allowsEditing为NO,image没有值

_drawView.image = info[UIImagePickerControllerEditedImage];

//原始图片

_drawView.image = info[UIImagePickerControllerOriginalImage];

[picker dismissViewControllerAnimated:YES completion:nil];

}

//取消选择

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {

NSLog(@"取消选择");

[picker dismissViewControllerAnimated:YES completion:nil];

}

iOS 画图讲解2的更多相关文章

  1. iOS 画图讲解

    5.画图 (1)画线 //绘图代码写在drawRect里,view加载完成,需要显示的时候调用 //1.获取图形上下文 2.创建路径 3.把图形放入上下文 4.渲染上下文 //drawRect的rec ...

  2. IOS NSUserDefaults 讲解 用法

    IOS NSUserDefaults 讲解 用法    NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名.密码之类的,个人觉得使用NSUserDefaults ...

  3. iOS开发讲解SDWebImage,你真的会用吗?

    SDWebImage作为目前最受欢迎的图片下载第三方框架,使用率很高.但是你真的会用吗?本文接下来将通过例子分析如何合理使用SDWebImage. 使用场景:自定义的UITableViewCell上有 ...

  4. 利用IOS画图功能画出五角星,并且可以调整五角星的填充范围

    我们要花的为一个黄色的五角星并且其中的填充黄色能够任意调整,比如只填满半个五角星,或者只填满一个角等等. 首先要重写DrawRect 方法,然后在这里实现我们的画图代码. - (void)drawRe ...

  5. iOS 画图基础

    基础要点: 1,画图不可以在 ViewController 里,而是应该在一个 UIView 的子类中,比如新建一个 DrawView 继承自 UIView. 2,覆盖 UIView 的 drawRe ...

  6. ios 画图总结

    0 CGContextRef context = UIGraphicsGetCurrentContext(); 设置上下文1 CGContextMoveToPoint 开始画线2 CGContextA ...

  7. ios 深入讲解iOS键盘一:控制键盘隐藏显示

    在iOS的开发中,我们一般使用UITextField.UITextView处理文字输入等操作,大部分情况下我们只需要一两行代码去手动管理键盘的显示隐藏:让UITextField或UITextView成 ...

  8. ios开发讲解之anchorPoint和position详解

    引言 相信初接触到CALayer的人都会遇到以下几个问题:  为什么修改anchorPoint会移动layer的位置? CALayer的position点是哪一点呢? anchorPoint与posi ...

  9. iOS 谓词讲解

    1.NSPredicate (1)比较运算符 1.比较运算符 > .< .== . >= .<= . != 运算符还可以跟逻辑运算符一起使用,&&  ,  || ...

随机推荐

  1. POJ 2886Who Gets the Most Candies?(线段树)

    POJ 2886 题目大意是说有n个人围成一圈,游戏的起点是k,每个人持有一个数字(非编号)num,每次当前的人退出圈,下一个人是他左边的第num个(也就是说下一个退出的是k+num, k可以为负数, ...

  2. POJ 3617 Best Cow Line (贪心)

    题意:给定一行字符串,让你把它变成字典序最短,方法只有两种,要么从头部拿一个字符,要么从尾部拿一个. 析:贪心,从两边拿时,哪个小先拿哪个,如果一样,接着往下比较,要么比到字符不一样,要么比完,也就是 ...

  3. M站 滚动日历弹框

    先放张效果图: 完整Demo: <!DOCTYPE html> <html lang="en"> <head> <meta http-eq ...

  4. maven 配置文件详解

    <projectxmlns="http://maven.apache.org/POM/4.0.0 " xmlns:xsi="http://www.w3.org/20 ...

  5. C#泛型在unity3D中的运用...

    泛型是什么? 这是摘自百度百科中对泛型的介绍: 泛型是c#2.0的一个新增加的特性,它为使用c#语言编写面向对象程序增加了极大的效力和灵活性.不会强行对值类型进行装箱和拆箱,或对引用类型进行向下强制类 ...

  6. 全代码实现ios-3

    决定做ios开发的时候,看了很多本关于ios开发的书籍,其中有国内的人写的,也有根据外国的书翻译过来的. 很可惜,这些书里的例子没办法照搬过来,因为Xcode更新换代太快了,而这些书本的内容更新的速度 ...

  7. [置顶] Android AlarmManager实现不间断轮询服务

    在消息的获取上是选择轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如更新检查,可能是半个小时或一个小时一 ...

  8. Web网站压力测试工具

    使用Microsoft Web Application Stress Tool对web进行压力测试 不错关于压力测试博客: http://blog.sina.com.cn/s/blog_5155e8d ...

  9. Java带包编译运行

    package cn.togeek.job; public class Test { public static void main(String[] args) throws Exception { ...

  10. Swift学习笔记十

    枚举 一个枚举为一组相关联的值定义一个通用类型,并且让你可以在代码中类型安全地操作这些值. C中的枚举将关联的名字指派给一系列整型值.Swift中的枚举类型更为活泼,并不需要为每个成员指定值,如果指定 ...