什么是产生黑白效果的最佳Core Image滤镜?

ORS*_*ios 28 cocoa core-image ios5

我正在使用Core Image,并希望在所选图像上产生黑白效果.

理想情况下,我希望能够访问Photoshop上提供的相同类型的选项,即Reds,Cyan,Greens,Blues和Magenta.目标是创造不同类型的黑白效果.

有谁知道什么过滤器最好操纵这些选项?如果不是,是否有人知道使用其他过滤器创建黑白效果的好方法?

谢谢

奥利弗

Shm*_*idt 56

- (UIImage *)imageBlackAndWhite
{
    CIImage *beginImage = [CIImage imageWithCGImage:self.CGImage];

    CIImage *blackAndWhite = [CIFilter filterWithName:@"CIColorControls" keysAndValues:kCIInputImageKey, beginImage, @"inputBrightness", [NSNumber numberWithFloat:0.0], @"inputContrast", [NSNumber numberWithFloat:1.1], @"inputSaturation", [NSNumber numberWithFloat:0.0], nil].outputImage;
    CIImage *output = [CIFilter filterWithName:@"CIExposureAdjust" keysAndValues:kCIInputImageKey, blackAndWhite, @"inputEV", [NSNumber numberWithFloat:0.7], nil].outputImage; 

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgiimage = [context createCGImage:output fromRect:output.extent];
    //UIImage *newImage = [UIImage imageWithCGImage:cgiimage];
    UIImage *newImage = [UIImage imageWithCGImage:cgiimage scale:image.scale orientation:image.imageOrientation];
    CGImageRelease(cgiimage);

    return newImage;
}
Run Code Online (Sandbox Code Playgroud)

更新:因为iOS6CIColorMonochrome过滤器,但我玩它并发现它不如我的那么好.

  • @Codler在阅读你关于它没有在Yosemite上工作的评论后,我认为它在iOS 8上也不起作用.但是,我刚刚测试过,发现它在iOS 8上完美运行,仍然 - 甚至保留了层透明度.我做了,但更新了一行:UIImage*newImage = [UIImage imageWithCGImage:cgiimage]; 在我的阅读:UIImage*newImage = [UIImage imageWithCGImage:cgiimage scale:image.scale orientation:image.imageOrientation]; 这样我就可以保持规模和方向. (2认同)

was*_*uss 13

这是CIColorMonochrome的例子

- (UIImage *)imageBlackAndWhite
{
    CIImage *beginImage = [CIImage imageWithCGImage:self.CGImage];

    CIImage *output = [CIFilter filterWithName:@"CIColorMonochrome" keysAndValues:kCIInputImageKey, beginImage, @"inputIntensity", [NSNumber numberWithFloat:1.0], @"inputColor", [[CIColor alloc] initWithColor:[UIColor whiteColor]], nil].outputImage;

    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef cgiimage = [context createCGImage:output fromRect:output.extent];
    UIImage *newImage = [UIImage imageWithCGImage:cgiimage scale:self.scale orientation:self.imageOrientation];

    CGImageRelease(cgiimage);

    return newImage;
}
Run Code Online (Sandbox Code Playgroud)


Jen*_*ton 7

为了创建纯单色效果,我使用CIColorMatrix了R,G和B矢量参数全部设置为(0.2125,0.7154,0.0721,0),并且alpha和偏置矢量保留默认值.

这些值是我在某些点上在互联网上查找的RGB到灰度转换系数.通过更改这些系数,您可以更改输入通道的贡献.通过缩放矢量的每个副本,以及可选地设置偏置矢量,您可以对输出进行着色.


Der*_*ote 6

这是转换为Swift(iOS 7及更高版本)的最高评级解决方案:

func blackAndWhiteImage(image: UIImage) -> UIImage {
    let context = CIContext(options: nil)
    let ciImage = CoreImage.CIImage(image: image)!

    // Set image color to b/w
    let bwFilter = CIFilter(name: "CIColorControls")!
    bwFilter.setValuesForKeysWithDictionary([kCIInputImageKey:ciImage, kCIInputBrightnessKey:NSNumber(float: 0.0), kCIInputContrastKey:NSNumber(float: 1.1), kCIInputSaturationKey:NSNumber(float: 0.0)])
    let bwFilterOutput = (bwFilter.outputImage)!

    // Adjust exposure
    let exposureFilter = CIFilter(name: "CIExposureAdjust")!
    exposureFilter.setValuesForKeysWithDictionary([kCIInputImageKey:bwFilterOutput, kCIInputEVKey:NSNumber(float: 0.7)])
    let exposureFilterOutput = (exposureFilter.outputImage)!

    // Create UIImage from context
    let bwCGIImage = context.createCGImage(exposureFilterOutput, fromRect: ciImage.extent)
    let resultImage = UIImage(CGImage: bwCGIImage, scale: 1.0, orientation: image.imageOrientation)

    return resultImage
}
Run Code Online (Sandbox Code Playgroud)