How to apply filter on uiimage in ios to remove shadow and lights?

1.5k views Asked by At

I wants to apply on filter uiimage in ios to remove shadow and lights. I have below android code for it. i needs to its equivalent in ios.

public static Bitmap changeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness)
{
ColorMatrix cm = new ColorMatrix(new float[]
        {
            contrast, 0, 0, 0, brightness,
            0, contrast, 0, 0, brightness,
            0, 0, contrast, 0, brightness,
            0, 0, 0, 1, 0
        });

Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());

Canvas canvas = new Canvas(ret);

Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(bmp, 0, 0, paint);

return ret;
}

i have used below ios code but can't get proper result

CIImage *inputImage = [CIImage imageWithCGImage:[UIImage   imageNamed:@"facedetectionpic.jpg"].CGImage]; // 1
// Make the filter
CIFilter *colorMatrixFilter = [CIFilter filterWithName:@"CIColorMatrix"]; // 2
[colorMatrixFilter setDefaults]; // 3
[colorMatrixFilter setValue:inputImage forKey:kCIInputImageKey]; // 4
[colorMatrixFilter setValue:[CIVector vectorWithX:1 Y:1 Z:1 W:0] forKey:@"inputRVector"]; // 5
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:1 Z:0 W:0] forKey:@"inputGVector"]; // 6
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:1 W:0] forKey:@"inputBVector"]; // 7
[colorMatrixFilter setValue:[CIVector vectorWithX:0 Y:0 Z:0 W:1] forKey:@"inputAVector"]; // 8

// Get the output image recipe
CIImage *outputImage = [colorMatrixFilter outputImage];  // 9

// Create the context and instruct CoreImage to draw the output image recipe into a CGImage
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[outputImage extent]]; // 10
2

There are 2 answers

0
Mitul Marsoniya On
    -(void)fiterImage:(CIColor*)imgFirstColor:(CIColor*)imgSecondColor:(CIColor*)imgThirdColor:(CIColor*)imgForthColor
        {
            CIImage *rawImageData1;
//arrImagesTemp image array
            rawImageData1 =[[CIImage alloc] initWithImage:[arrImagesTemp objectAtIndex:0]];

            if (rawImageData1)
            {
                CIImage* outputImage = nil;

                CIFilter* greenGenerator = [CIFilter filterWithName:@"CIConstantColorGenerator"];

                [greenGenerator setValue:imgFirstColor forKey:@"inputColor"];
                CIImage* greenImage = [greenGenerator valueForKey:@"outputImage"];

                CIImage *rawImageData =[[CIImage alloc] initWithImage:[arrImagesTemp objectAtIndex:0]];
                CIFilter* filter = [CIFilter filterWithName:@"CIMultiplyCompositing"];
                [filter setValue:greenImage forKey:@"inputImage"];
                [filter setValue:rawImageData forKey:@"inputBackgroundImage"];
                outputImage = [filter valueForKey:@"outputImage"];

                CIImage *filteredImageData = [filter valueForKey:@"outputImage"];

                CIContext* context = [CIContext contextWithOptions:nil];
                CGImageRef outputImageRef = [context createCGImage:filteredImageData fromRect:[filteredImageData extent]];
                UIImage *modifiedPhoto = [UIImage imageWithCGImage:outputImageRef scale:1 orientation:UIImageOrientationUp];

            }
        }
0
Lokesh On

This is for data filtration .this logic you use in your code as image filtration remove shadow or brightness

  if ([categoryTitle isEqualToString:@"Category"])
         {
             isCategory=NO;
         }
         else
         {

         categoryData=[[NSMutableArray alloc]init];
         for (int a=0; a<fetchedDataArray.count; a++)
         {
             categoryDictionary=[[NSMutableDictionary alloc]init];
             categoryDictionary=[fetchedDataArray objectAtIndex:a];
             NSString *categ=[[[[[categoryDictionary objectForKey:@"terms"] objectForKey:@"offershop"] objectAtIndex:0] objectForKey:@"parent"] objectForKey:@"name"];
             if ([categoryTitle isEqualToString:categ])
             {
                 [categoryData addObject:categoryDictionary];
             }
             //searchDictionary=nil;
         }
         NSLog(@"done");
         }
         [self.tableview reloadData];

     }