123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- //
- // KKMasaicTool.m
- // CLImageEditorDemo
- //
- // Created by 邬维 on 2017/1/4.
- // Copyright © 2017年 kook. All rights reserved.
- //
- #import "KKMosaicTool.h"
- #import "KKMosaicView.h"
- @implementation KKMosaicTool{
- KKMosaicView *mosaicView; //显示马赛克
- UIView *_menuView; //底部菜单
- }
- + (NSString*)defaultTitle
- {
- return Localized(@"JX_ImageEditMosaic");
- }
- + (UIImage*)defaultIconImage
- {
- return [UIImage imageNamed:@"ToolMasaic"];
- }
- + (NSUInteger)orderNum{
- return KKToolIndexNumberFirst;
- }
- #pragma mark- implementation
- - (void)setup{
- CIImage *ciImage = [[CIImage alloc] initWithImage:self.editor.imageView.image];
- //生成马赛克
- CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];
- [filter setValue:ciImage forKey:kCIInputImageKey];
- //马赛克像素大小
- [filter setValue:@(50) forKey:kCIInputScaleKey];
- CIImage *outImage = [filter valueForKey:kCIOutputImageKey];
-
- CIContext *context = [CIContext contextWithOptions:nil];
- CGImageRef cgImage = [context createCGImage:outImage fromRect:[outImage extent]];
- UIImage *showImage = [UIImage imageWithCGImage:cgImage];
- CGImageRelease(cgImage);
-
- mosaicView = [[KKMosaicView alloc]initWithFrame:self.editor.imageView.bounds];
-
- mosaicView.surfaceImage = self.editor.imageView.image;
- mosaicView.image = showImage;
-
- [self.editor.imageView addSubview:mosaicView];
-
- self.editor.imageView.userInteractionEnabled = YES;
- self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2;
- self.editor.scrollView.panGestureRecognizer.delaysTouchesBegan = NO;
- self.editor.scrollView.pinchGestureRecognizer.delaysTouchesBegan = NO;
-
- _menuView = [[UIView alloc] initWithFrame:self.editor.menuView.frame];
- _menuView.backgroundColor = self.editor.menuView.backgroundColor;
- [self.editor.view addSubview:_menuView];
-
- [self setMenu];
-
- _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top);
- [UIView animateWithDuration:kImageToolAnimationDuration
- animations:^{
- _menuView.transform = CGAffineTransformIdentity;
- }];
- }
- - (void)cleanup
- {
- [mosaicView removeFromSuperview];
- self.editor.imageView.userInteractionEnabled = NO;
- self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 1;
-
- [UIView animateWithDuration:kImageToolAnimationDuration
- animations:^{
- _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top);
- }
- completion:^(BOOL finished) {
- [_menuView removeFromSuperview];
- }];
- }
- - (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock
- {
- // dispatch_async(dispatch_get_main_queue(), ^{
- //
- // });
- UIImage *image = [self buildImage];
- completionBlock(image, nil, nil);
- }
- - (void)setMenu{
- // UIButton *oneButton = [[UIButton alloc] initWithFrame:CGRectMake(25, 25, 30, 30)];
- // oneButton.backgroundColor = [UIColor redColor];
- // [_menuView addSubview:oneButton];
- //
- //
- //
- // UIButton *whitebutton = [[UIButton alloc] initWithFrame:CGRectMake(180, 25, 30, 30)];
- // whitebutton.backgroundColor = [UIColor whiteColor];
- // [_menuView addSubview:whitebutton];
- }
- - (UIImage*)buildImage
- {
- UIGraphicsBeginImageContextWithOptions(mosaicView.bounds.size, NO, 0);
- [mosaicView.layer renderInContext:UIGraphicsGetCurrentContext()];
- UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return image;
- }
- @end
|