你怎么能在UIImage上应用过滤器就像喷在砖墙上一样?

时间:2016-02-29 22:41:45

标签: ios objective-c uiimage core-image cifilter

我想将图像与背景图像混合。 好像是喷在墙上。 我怎样才能获得真实的混合。

我尝试过alpha但没有给出好的结果。

我在这个CoreImage中退出了新的东西。 请帮忙。

与此类似的东西。 http://designshack.net/wp-content/uploads/texturetricks-14.jpg

我搜索了一些但没有运气。 我甚至不知道我到底要找什么。 不确定如何谷歌。

2 个答案:

答案 0 :(得分:1)

以下是如何将两张图像混合在一起。

UIImage *bottomImage = [UIImage imageNamed:@"bottom.png"];
UIImage *image = [UIImage imageNamed:@"top.png"];

CGSize newSize = CGSizeMake(width, height);
UIGraphicsBeginImageContext( newSize );

// Use existing opacity as is
[bottomImage drawInRect:CGRectMake(0,0,newSize.width,newSize.height)];
// Apply supplied opacity
[image drawInRect:CGRectMake(0,0,newSize.width,newSize.height) blendMode:kCGBlendModeNormal alpha:0.8];

UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

答案 1 :(得分:0)

这种作品。我发现了smiley face image - 黑色的白色 - 和brick background

第一项工作是创建该对的CIImage版本。我通过CIMaskToAlpha过滤器将笑脸传递给黑色透明:

let brick = CIImage(image: UIImage(named: "brick.jpg")!)!

let smiley = CIImage(image: UIImage(named: "smiley.jpg")!)!
    .imageByApplyingFilter("CIMaskToAlpha", withInputParameters: nil)

然后将该对与CISubtractBlendMode

组合在一起
let composite = brick
    .imageByApplyingFilter("CISubtractBlendMode",
        withInputParameters: [kCIInputBackgroundImageKey: smiley])

最终的结果几乎就在那里:

enter image description here

减法混合仅适用于白色艺术品。

这是另一种方法:使用CISoftLightBlendMode进行混合,使用伽玛来增强效果,然后使用笑脸作为遮罩将其合成到原始砖砌体上:

let composite = smiley
    .imageByApplyingFilter("CISoftLightBlendMode",
        withInputParameters: [kCIInputBackgroundImageKey: brick])
    .imageByApplyingFilter("CIGammaAdjust",
        withInputParameters: ["inputPower": 0.5])
    .imageByApplyingFilter("CIBlendWithMask",
        withInputParameters: [kCIInputBackgroundImageKey: brick, kCIInputMaskImageKey: smiley])

给出了:

enter image description here

这种方法很不错,因为你可以用伽玛能力控制油漆白度。

西蒙