上下文的矩阵操作其实就是修改上下文的形变,
主要有以下几种
平移
CGContextTranslateCTM(ctx, 100, 100);
旋转
CGContextRotateCTM(ctx, M_2_PI);
缩放
CGContextScaleCTM(ctx, 0.5, 0.5);
给图片加水印
实现水印效果的思路:
开启一个和原始图片一样的图片上下文.
把原始图片先绘制到图片上下文.
再把要添加的水印(文字,logo)等绘制到图片上下文.
最后从上下文中取出一张图片.
关闭图片上下文.
- 1.如何开启一个图片上下文?
size:开启多大的上文
opaque:不透明度
scale:缩放上下文.
UIGraphicsBeginImageContextWithOptions(image.size, YES, 0);
- 2.如何从图片上下文当中生成一张图片?
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
- 3.如何关闭上下文?
UIGraphicsEndImageContext();
简单圆形图片的剪切
上下文的大小和原始图片保持一样.以免图片被拉伸缩放.
在上下文的上面添加一个圆形裁剪区域.圆形裁剪区域的半径大小和图片的宽度一样大.
把要裁剪的图片绘制到图片上下文当中.
从上下文当中取出图片.
关闭上下文.
- 1.如何设置圆形路径?
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:
CGRectMake(0, 0, image.size.width, image.size.width)];
- 2.如何把一个路径设为裁剪区域?
[path addClip];
绘制有边框的图片
具体实现思路:
1.假设边框宽度为BorderW
2.开启的图片上下文的尺寸就应该是原始图片的宽高分别加上两倍的BorderW,这样开启的目的是为了不让原始图片变形.
3.在上下文上面添加一个圆形填充路径.位置从0,0点开始,宽高和上下文尺寸一样大.设置颜色为要设置的边框颜色.
4.继续在上下文上面添加一个圆形路径,这个路径为裁剪路径.
它的x,y分别从BorderW这个点开始.宽度和高度分别和原始图片的宽高一样大.
将绘制的这个路径设为裁剪区域.
5.把原始路径绘制到上下文当中.绘制的位置和是裁剪区域的位置相同,x,y分别从border开始绘制.
6.从上下文状态当中取出图片.
7.关闭上下文状态.
//0.加载图片
UIImage *image = [UIImage imageNamed:@"阿狸头像"];
//1.确定边框宽度
CGFloat borderW = 2;
//2.开启一个跟图片原始大小的上下文
//opaque:不透明度
CGSize size = CGSizeMake(image.size.width + borderW * 2, image.size.height + 2 *borderW);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
//3绘制一个大圆形显示
UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, size.width, size.height)];
//2.2.把圆形的路径设置成裁剪区域
[[UIColor orangeColor] set];
[path fill];
//4.绘制一个小圆,把小圆设置成裁剪区域
UIBezierPath *path2 = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(borderW, borderW, image.size.width, image.size.height)];
[path2 addClip];
//5.把图片绘制到上下文当中
[image drawAtPoint:CGPointMake(borderW, borderW)];
//6.从上下文当中取出图片
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
//7.关闭上下文
UIGraphicsEndImageContext();
//