日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

IOS美图秀秀(滤镜和涂鸦)和 添加阴影功能

發布時間:2024/3/13 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IOS美图秀秀(滤镜和涂鸦)和 添加阴影功能 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如今對個人圖片的美化可所謂,天花亂醉。今天,就和大家一起進入一個美麗的世界。

第一步:首先,了解一個重要的知識,如下:

? ?UIImageUIView使用的是左上原點坐標,Core ImageCore Graphics使用的是左下原點坐標

第二部:效果圖預覽。


第二部:我們就要上代碼了。代碼一共 266行。不好之處,請多包含。

#import "ViewController.h"


@interface ViewController ()

{

? ? @protected

? ? //創建圖像上下文

? ? CIContext * Context ;

? ? // 創建顯示圖片的控件

? ? UIImageView * ImageV;

? ? //我們要處理的圖像

? ? CIImage * WillDoImage;

? ? //處理后,我們得到的圖像

? ? CIImage * OutImage;

? ? //添加濾鏡鏡頭

? ? CIFilter * Filter_zsj;

? ? @public

? ? // 濾鏡功能背景圖

? ? UIView * View ;

?? ?

?? ?

}

@property(nonatomic,strong) NSMutableArray * AllPointArray;

// 標記是否可以涂鴉

@property(nonatomic,assign) BOOL TuYaBool;

//系統暫時圖像

@property(nonatomic,strong) UIImage * Temp_Image;

@end


@implementation ViewController


- (void)viewDidLoad {

? ? [super viewDidLoad];

? ? self.AllPointArray = [NSMutableArray arrayWithCapacity:0];

? ? self.Temp_Image = [UIImage imageNamed:@"4673e28380ac5b03ab2f8da9bb78d9e4.jpg"];

? ? [self loadNav];

? ? [self makeUI];

? ? // 創建濾鏡的功能按鈕

? ? [self filterBtn];

? ? // Do any additional setup after loading the view, typically from a nib.

}

-(void)loadNav{

? ? UILabel * Nav_Label = [[UILabel alloc]initWithFrame:CGRectMake(self.view.bounds.size.width/2-100, 20, 200, 44)];

? ? Nav_Label.textAlignment = NSTextAlignmentCenter;

? ? Nav_Label.text = @"成功QQ吧提供--濾鏡";

? ? Nav_Label.textColor = [UIColor magentaColor];

? ? Nav_Label.font = [UIFont fontWithName:@"" size:22];

? ? Nav_Label.shadowColor = [UIColor lightGrayColor];

? ? Nav_Label.shadowOffset = CGSizeMake(5, -5);

?? [self.view addSubview:Nav_Label];

? ? UIView * Line =[[UIView alloc] initWithFrame:CGRectMake(0, 63.5, self.view.bounds.size.width, 0.5) ];

? ? Line.backgroundColor = [UIColor lightGrayColor];

? ? [self.view addSubview: Line];

}

- (void)didReceiveMemoryWarning {

? ? [super didReceiveMemoryWarning];

? ? // Dispose of any resources that can be recreated.

}

//圖形布局

-(void)makeUI{

? ? // 添加加載控件(image

? ? ImageV = [[UIImageView alloc]initWithFrame:CGRectMake(0, 65, self.view.bounds.size.width, self.view.bounds.size.height-65)];

? ? // 設置圖片的顯示模式

? ? ImageV.contentMode = UIViewContentModeScaleToFill;

? ? //顯示圖像

? ? [self.view addSubview:ImageV];

? ? // 創建圖像上下文

? ? [self getcontext];

? ? // 創建濾鏡,鏡頭

? ? [self createFilter];

? ? //開始繪圖

? ? [self createImage];

? ? // 進行圖片的顯示

? ? [self showImage];

}

-(void)getcontext{

? ? // 直接獲取,以免處理優先級降低

? ? Context = [CIContext contextWithOptions:nil];

?? ?

? ? // 第二種:

? ? // 使用OpenGl 我們選著 最低的版本

? ? /*

? ? EAGLContext * EAG = [[EAGLContext alloc]initWithAPI:kEAGLRenderingAPIOpenGLES1 sharegroup:nil];

? ? Context = [CIContext contextWithEAGLContext:EAG];*/

?? ?

? ? // 還有第三種

? ? /*NSNumber * Number = [NSNumber numberWithBool:YES];

? ? NSDictionary * Option_Dict = [NSDictionary dictionaryWithObject:Number forKey:kCIContextUseSoftwareRenderer];

? ? Context = [CIContext contextWithOptions:Option_Dict];

?? ? */

}

-(void)createFilter{

? ? Filter_zsj = [CIFilter filterWithName:@"CIColorControls"] ;

}

-(void)createImage{

? ? ImageV.image = self.Temp_Image;

? ? //獲取圖像

? ? WillDoImage = [CIImage imageWithCGImage:ImageV.image.CGImage];

? ? //讓濾鏡鏡頭捕捉到她

? ? [Filter_zsj setValue:WillDoImage forKey:@"inputImage"];

}

-(void)showImage{

? ? // 獲取濾鏡后的圖片

? ? CIImage * OverImage = [Filter_zsj outputImage];

? ? // 創建圖像上下文

? ? // extent? Extent(xmin, ymin, xmax, ymax, spatialReference) 創建一個范圍對象。坐標表示邊界框左下角和右上角的坐標

? ? CGImageRef ? ImageRef = [Context createCGImage:OverImage fromRect: [OverImage extent]];

? ? // 從圖像上下文獲取圖像

? ? ImageV.image = [UIImage imageWithCGImage:ImageRef];

? ? CGImageRelease(ImageRef);

}

-(void)filterBtn{

? ? UIView * Filter_View = [[UIView alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height-50, self.view.frame.size.width, 50)];

? ? Filter_View.backgroundColor = [UIColor cyanColor];

? ? [self.view addSubview:Filter_View];

? ? NSArray * Btn_titleArray = @[@"濾鏡",@"磨皮",@"瘦身",@"涂鴉"];

? ? for (int i =0 ;i< Btn_titleArray.count ;i++){

? ? ? ? UIButton * Button = [UIButton buttonWithType:UIButtonTypeCustom];

? ? ? ? Button.frame = CGRectMake(10 + i* (80+(self.view.frame.size.width-340)/3), 5, 80, 40);

? ? ? ? Button.layer.cornerRadius = 6;

? ? ? ? [Button.layer setBorderWidth: 0.5];

? ? ? ? Button.tag = i;

? ? ? ? [Button setTitle:Btn_titleArray[i] forState:UIControlStateNormal];

? ? ? ? [Button addTarget:self action:@selector(filterClick:) forControlEvents:UIControlEventTouchUpInside];

? ? ? ? [Filter_View addSubview:Button];

? ? }

}

//圖像濾鏡處理

-(void)filterClick:(UIButton*)filterbtn{

? ? switch (filterbtn.tag) {

? ? ? ? case 0:

? ? ? ? {

? ? ? ? ? ? if (filterbtn.selected) {

? ? ? ? ? ? ? ? filterbtn.selected = NO;

? ? ? ? ? ? ? ? [self deallocView];

? ? ? ? ? ? }else{

? ? ? ? ? ? filterbtn.selected = YES;

? ? ? ? ? ? [self filterstar];

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? ? ? break;

? ? ? ? case 1:{

?? ? ? ? ? ?

? ? ? ? }

? ? ? ? ? ? break;

? ? ? ? case 2:

?? ? ? ? ? ?

? ? ? ? ? ? break;

? ? ? ? case 3:

? ? ? ? ? ? if (filterbtn.selected) {

? ? ? ? ? ? ? ? filterbtn.selected = NO;

? ? ? ? ? ? ? ? self.TuYaBool = NO;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? filterbtn.selected = YES;

? ? ? ? ? ? ? ? self.TuYaBool = YES;

? ? ? ? ? ? }

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? break;

? ? }

}

-(void)filterstar{

? ? View = [[UIView alloc]initWithFrame:CGRectMake(10, self.view.frame.size.height-210, self.view.frame.size.width-20, 150)];

? ? View.backgroundColor = [UIColor whiteColor];

? ? View.layer.cornerRadius = 6;

? ? [self.view addSubview:View];

? ? NSArray * ColoerFunction = @[@"? ? :",@"飽和度 :",@"對比度 :"];

?? ?

? ? for (int i =0 ; i< ColoerFunction.count; i++) {

? ? ? ? UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(10,10+ i * 50, 70, 40)];

? ? ? ? label.text = ColoerFunction[i];

? ? ? ? label.textColor = [UIColor redColor];

? ? ? ? [View addSubview:label];

?? ? ? ?

? ? ? ? UISlider * Slider = [[UISlider alloc]initWithFrame:CGRectMake(CGRectGetMaxX(label.frame), 10+ i * 50, CGRectGetWidth(View.frame)-CGRectGetWidth(label.frame)-25, 40)];

? ? ? ? Slider.maximumValue = 1.0;

? ? ? ? Slider.minimumValue = 0.0;

? ? ? ? Slider.tag = 100+i;

? ? ? ? Slider.thumbTintColor = [UIColor greenColor];

? ? ? ? Slider.maximumTrackTintColor = [UIColor purpleColor];

? ? ? ? [Slider addTarget:self action:@selector(slider:) forControlEvents:UIControlEventValueChanged];

? ? ? ? [View addSubview:Slider];

? ? }

?? ?

?? ?

}

// 背景圖的消失

-(void)deallocView{

? ? [View removeFromSuperview];

}

// 功能

-(void)slider:(UISlider*)slider{

? ? switch (slider.tag - 100) {

? ? ? ? case 0:{

? ? ? ? ? ? // 亮度

? ? ? ? ? ? [Filter_zsj setValue:[NSNumber numberWithFloat:slider.value] forKey:@"inputBrightness"];

? ? ? ? ? ? [self showImage];

?? ? ? ? ? ?

? ? ? ? }

? ? ? ? ? ? break;

? ? ? ? case 1:{

? ? ? ? ? ? // 飽和度 注意:飽和度的數值

? ? ? ? ? ? [Filter_zsj setValue:[NSNumber numberWithFloat:(1.0-slider.value)] forKey:@"inputSaturation"];

? ? ? ? ? ? [self showImage];

? ? ? ? }

? ? ? ? ? ? break;

? ? ? ? case 2:{

? ? ? ? ? ? // 對比度

? ? ? ? ? ? [Filter_zsj setValue:[NSNumber numberWithFloat:(1.0-slider.value)] forKey:@"inputContrast"];

? ? ? ? ? ? [self showImage];

? ? ? ? }

? ? ? ? ? ? break;

? ? ? ? default:

? ? ? ? ? ? break;

? ? }

}

// 涂鴉

-(void)tuya{

? ? // 獲取圖像的上下文

?? ?

? ? for (int i = 0 ; i<_AllPointArray.count; i++) {

? ? ? ? for (int j =0 ; j<(int)([_AllPointArray[i] count]-1); j++) {

? ? ? ? ? ? UIGraphicsBeginImageContext(ImageV.frame.size);

? ? ? ? ? ? [ImageV.image drawInRect:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height-65)];

? ? ? ? ? ? // 取得第一個

? ? ? ? ? ? CGPoint onepoint = [_AllPointArray[i][j] CGPointValue];

? ? ? ? ? ? // 獲取下一個

? ? ? ? ? ? CGPoint nextpoint = [_AllPointArray[i][j+1] CGPointValue];

? ? ? ? ? ? CGContextMoveToPoint(UIGraphicsGetCurrentContext(), onepoint.x, onepoint.y);

? ? ? ? ? ? CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), nextpoint.x, nextpoint.y);

? ? ? ? ? ? [[UIColor redColor] set];

? ? ? ? ? ? CGContextDrawPath(UIGraphicsGetCurrentContext(), kCGPathStroke);

? ? ? ? ? ? ImageV.image = UIGraphicsGetImageFromCurrentImageContext();

? ? ? ? }

? ? }

? ? self.Temp_Image = ImageV.image;

? ? [self createImage];

}

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

? ? if (self.TuYaBool) {

? ? ? ? NSMutableArray * pointArray = [NSMutableArray arrayWithCapacity:0];

? ? ? ? [_AllPointArray addObject:pointArray];

? ? }

?? ?

}

-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{

? ? if (self.TuYaBool) {

? ? ? ? UITouch * touch = [touches anyObject];

? ? ? ? CGPoint? point = [touch locationInView:ImageV];

? ? ? ? NSValue * value = [NSValue valueWithCGPoint:point];

? ? ? ? [[_AllPointArray lastObject] addObject:value];

? ? ? ? [self tuya];

? ? }

}

@end



總結

以上是生活随笔為你收集整理的IOS美图秀秀(滤镜和涂鸦)和 添加阴影功能的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。