KKMosaicTool.m 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. //
  2. // KKMasaicTool.m
  3. // CLImageEditorDemo
  4. //
  5. // Created by 邬维 on 2017/1/4.
  6. // Copyright © 2017年 kook. All rights reserved.
  7. //
  8. #import "KKMosaicTool.h"
  9. #import "KKMosaicView.h"
  10. @implementation KKMosaicTool{
  11. KKMosaicView *mosaicView; //显示马赛克
  12. UIView *_menuView; //底部菜单
  13. }
  14. + (NSString*)defaultTitle
  15. {
  16. return Localized(@"JX_ImageEditMosaic");
  17. }
  18. + (UIImage*)defaultIconImage
  19. {
  20. return [UIImage imageNamed:@"ToolMasaic"];
  21. }
  22. + (NSUInteger)orderNum{
  23. return KKToolIndexNumberFirst;
  24. }
  25. #pragma mark- implementation
  26. - (void)setup{
  27. CIImage *ciImage = [[CIImage alloc] initWithImage:self.editor.imageView.image];
  28. //生成马赛克
  29. CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];
  30. [filter setValue:ciImage forKey:kCIInputImageKey];
  31. //马赛克像素大小
  32. [filter setValue:@(50) forKey:kCIInputScaleKey];
  33. CIImage *outImage = [filter valueForKey:kCIOutputImageKey];
  34. CIContext *context = [CIContext contextWithOptions:nil];
  35. CGImageRef cgImage = [context createCGImage:outImage fromRect:[outImage extent]];
  36. UIImage *showImage = [UIImage imageWithCGImage:cgImage];
  37. CGImageRelease(cgImage);
  38. mosaicView = [[KKMosaicView alloc]initWithFrame:self.editor.imageView.bounds];
  39. mosaicView.surfaceImage = self.editor.imageView.image;
  40. mosaicView.image = showImage;
  41. [self.editor.imageView addSubview:mosaicView];
  42. self.editor.imageView.userInteractionEnabled = YES;
  43. self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 2;
  44. self.editor.scrollView.panGestureRecognizer.delaysTouchesBegan = NO;
  45. self.editor.scrollView.pinchGestureRecognizer.delaysTouchesBegan = NO;
  46. _menuView = [[UIView alloc] initWithFrame:self.editor.menuView.frame];
  47. _menuView.backgroundColor = self.editor.menuView.backgroundColor;
  48. [self.editor.view addSubview:_menuView];
  49. [self setMenu];
  50. _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top);
  51. [UIView animateWithDuration:kImageToolAnimationDuration
  52. animations:^{
  53. _menuView.transform = CGAffineTransformIdentity;
  54. }];
  55. }
  56. - (void)cleanup
  57. {
  58. [mosaicView removeFromSuperview];
  59. self.editor.imageView.userInteractionEnabled = NO;
  60. self.editor.scrollView.panGestureRecognizer.minimumNumberOfTouches = 1;
  61. [UIView animateWithDuration:kImageToolAnimationDuration
  62. animations:^{
  63. _menuView.transform = CGAffineTransformMakeTranslation(0, self.editor.view.height-_menuView.top);
  64. }
  65. completion:^(BOOL finished) {
  66. [_menuView removeFromSuperview];
  67. }];
  68. }
  69. - (void)executeWithCompletionBlock:(void (^)(UIImage *, NSError *, NSDictionary *))completionBlock
  70. {
  71. // dispatch_async(dispatch_get_main_queue(), ^{
  72. //
  73. // });
  74. UIImage *image = [self buildImage];
  75. completionBlock(image, nil, nil);
  76. }
  77. - (void)setMenu{
  78. // UIButton *oneButton = [[UIButton alloc] initWithFrame:CGRectMake(25, 25, 30, 30)];
  79. // oneButton.backgroundColor = [UIColor redColor];
  80. // [_menuView addSubview:oneButton];
  81. //
  82. //
  83. //
  84. // UIButton *whitebutton = [[UIButton alloc] initWithFrame:CGRectMake(180, 25, 30, 30)];
  85. // whitebutton.backgroundColor = [UIColor whiteColor];
  86. // [_menuView addSubview:whitebutton];
  87. }
  88. - (UIImage*)buildImage
  89. {
  90. UIGraphicsBeginImageContextWithOptions(mosaicView.bounds.size, NO, 0);
  91. [mosaicView.layer renderInContext:UIGraphicsGetCurrentContext()];
  92. UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
  93. UIGraphicsEndImageContext();
  94. return image;
  95. }
  96. @end