IOS学习之——位图上下文 -- 水印图片

 //********************************************************************************* 位图上下文 水印照片 -
            生成一张有水印的照片,一定要获取UIImage 对象, 然后显示中imageview 上

            //创建一背景图片
            UIImage *bgImage =[UIImage imageNamed:@"scene"];
            //创建一个位图(图片),开启位图上下文
            //size 位图大小 opaque:alpha通道:YES 不透明 NO 不透明 使用NO,生成的更清晰
            //scale 比例 设置0.0 为屏幕的比例
            //scale 是用于获取生成图片大小,比如位图大小 20×20 /生成一张图片 (20*scale × 20*scale)
            NSLog(@"当前屏幕的比例%f ",[UIScreen mainScreen].scale);
            UIGraphiceBeginImageContextWithOptions(bgImage.size,NO,0.0);

            //2画背景图片
            [bgImage drawInRect :CGRectMake(0,0,bgImage.size.width,bgImage.size.height)];

            //3 画水印,
            //算水印的位置和大小
            CGFloat waterW = 80;
            CGFloat waterH = 60;
            CGFloat waterX = bgImage.size.width -waterW;
            CGFloat waterY = bgImage.size.height -waterH;

            UIImage *waterImage =[UIImage imageName:@"logo"];
            [waterImage drawInRect:CGRectMake(waterX,waterY,waterW,waterH)];
            //4 从位图上下文获取 当前编辑的图片
            UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
            //5 结束当前位置编辑
            UIGraphicsEndImageContext();
            //6 显示在UImageView 上
            self.imageView.image = newImage;


#pragma mark 剪裁图片
            //需求:从位图上下文,裁剪图片[裁剪成圆形,也添加圆形的边框],生成一张图片

            // 获取要裁剪的图片
            UIImage *img = [UIImage imageNamed:@"papa"];
            CGRect imgRect = CGRectMake(0, 0, img.size.width, img.size.height);

            // 1.开启位图上下文
            UIGraphicsBeginImageContextWithOptions(img.size, NO, 0.0);

#warning 在自定义的view的drawRect方法里,调用UIGraphicsGetCurrentContext获取的上下文,是图层上下文(Layer Graphics Context)
            // 1.1 获取位图上下文
            CGContextRef bitmapContext = UIGraphicsGetCurrentContext();

            // 2.往位图上下裁剪图片

****    // 2.1 指定一个圆形的路径,把圆形之外的剪切掉
            CGContextAddEllipseInRect(bitmapContext, imgRect);
            CGContextClip(bitmapContext);


            // 2.2 添加图片
            [img drawInRect:imgRect];

            // 2.3 添加边框
            // 设置边框的宽度
            CGContextSetLineWidth(bitmapContext, 3);
            // 设置边框的颜色
            [[UIColor blueColor] set];
            CGContextAddEllipseInRect(bitmapContext, imgRect);
            CGContextStrokePath(bitmapContext);


            // 3.获取当前位图上下文的图片
            UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

            // 4.结束位图编辑
            UIGraphicsEndImageContext();

            // 把图片显示在控制器的view
            self.imageView.image = newImage;


            // 保存图片 先把图片转成NSData,然后调用其的write
            NSData *imgData = UIImagePNGRepresentation(newImage);
            [imgData writeToFile:@"/Users/apple/Desktop/new.png" atomically:YES];


你可能感兴趣的:(ios,位图)