Quartz2D图片处理

Posted Hunter_Wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartz2D图片处理相关的知识,希望对你有一定的参考价值。

//
//  ViewController.m
//  Quartz2D图片处理
//
//  Created by dllo on 16/3/30.
//  Copyright © 2016年 HaiTeng. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor cyanColor];
   
    UIImageView *imgV = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
    imgV.center = self.view.center;
    [self.view addSubview:imgV];
    
//    imgV.image = [self addWaterMark:[UIImage imageNamed:@"手艺人.jpg"]];
    imgV.image = [self imageCutter:[UIImage imageNamed:@"手艺人.jpg"]];
 
    imgV.image = [self screenShotCut];
    self.view.backgroundColor = [UIColor whiteColor];
}

#pragma mark - 加水印
- (UIImage *)addWaterMark:(UIImage *)sourceImage
{
     //上下文 位图上下文
     //与layer层的上下文不同的是 layer层上下文是获取到的 ,位图上下文需要我们手动创建
     //位图上下文与layer层无关 所以不用再DrawRect方法里面实现
    
    
     //1.上下文 创建位图上下文
    /*
     <#CGSize size#>        上下文大小
     <#BOOL opaque#>        是否透明
     <#CGFloat scale#>      缩放比例
     */
    UIGraphicsBeginImageContextWithOptions(sourceImage.size, NO, 0);
    
    //2.绘制内容
    //绘制源图片到上下文
    [sourceImage drawAtPoint:CGPointZero];
    //绘制文字在上下文
    NSString *str = @"手艺人";
    /*
     第一个参数: 相对于源图片自己大小 给point值
     第二个参数: 给文字设置富文本
     
     */
    //设置文字样式
    NSMutableDictionary *dic = [NSMutableDictionary dictionary];
    dic[NSForegroundColorAttributeName] = [UIColor blackColor];
    dic[NSFontAttributeName] = [UIFont boldSystemFontOfSize:50.f];
    
    [str drawAtPoint:CGPointMake(sourceImage.size.width - 200, sourceImage.size.height - 200) withAttributes:dic];
    
    //3.从当前位图上下文 生成带有水印的图片
    UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
    
    //4.关闭上下文(放在内存泄露)
    UIGraphicsEndImageContext();
    
    return img;
}

#pragma mark - 图片截圆
- (UIImage *)imageCutter:(UIImage *)SourceImg{
    //1.开启上下文
    UIGraphicsBeginImageContextWithOptions(SourceImg.size, NO, 0);
    
    //2.获取裁剪区域
    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(0, 0, SourceImg.size.width, SourceImg.size.height)];
    
    //将路径设置为裁剪区域
    [path addClip];
    
    //3.绘制图片
    [SourceImg drawAtPoint:CGPointZero];
    
    //4.生成图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    //关闭上下文
    UIGraphicsEndImageContext();
    
    return image;
}

#pragma mark 截屏
- (UIImage *)screenShotCut
{
    //开启上下文
    UIGraphicsBeginImageContextWithOptions([UIScreen mainScreen].bounds.size, NO, 0);
    //获取上下文
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    //将self.view的控件 渲染到上下文
    [self.view.layer renderInContext:ctx];

    //生成图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    
    //关闭
    UIGraphicsEndImageContext();
    
    return image;
}


@end

 

以上是关于Quartz2D图片处理的主要内容,如果未能解决你的问题,请参考以下文章

IOS Quartz2D 通过UIColor生成图片

iOS开发UI篇—Quartz2D使用(图片剪切)

quartz2D 如何绘制圆形图片, 及圆环图片

iOS边练边学--(Quartz2D)图片添加水印

iOS边练边学--(Quartz2D)图片裁剪,带圆环的裁剪

iOS图像处理之UI,CG和CI