如何在 iOS SDK 中的选定图像区域上应用滤镜/颜色

Posted

技术标签:

【中文标题】如何在 iOS SDK 中的选定图像区域上应用滤镜/颜色【英文标题】:How to apply filters/color on selected image area in iOS SDK 【发布时间】:2014-11-28 07:29:12 【问题描述】:

我有一张我的脸的图像,我只想在嘴唇/眼睛等上应用一些滤镜或颜色。我已经检测到这些区域,但我的问题是如何在那里添加颜色,以便看起来自然并与现有的混合图片。

请查看下图以更好地了解我需要什么。看看涂在嘴唇上的颜色非常自然,

【问题讨论】:

这个问题已经讨论过很多次了。可以使用CoreImage、GPUFilter、CoreGraphics...请使用前搜索... 您是在问如何将过滤器应用到特定区域,还是您应该应用哪些过滤器/技术? 安娜,我正在尝试更改颜色或为 UIImage 的像素添加一些过滤器。我使用一些矩形在简单图像上添加了过滤器,但这看起来并不自然,我需要过滤器在图像的某些特定区域看起来与原始图像自然融合。 @MobileDeveloperiosandroid 你有解决这个问题的方法吗?我也面临同样的问题。你能帮帮我吗? 【参考方案1】:

使用以下代码为给定的过滤区域设置任何颜色。对于演示,我在这里使用了矩形来绘制,您可以使用任何其他有界区域来填充。这里我用黄色填充,你也可以改变颜色。

UIImage *image=...;//Add Code for getting Main Image
CGRect imageRect = CGRectMake(0.0, 0.0, image.size.width, image.size.height);

UIGraphicsBeginImageContext(image.size);
[image drawInRect:imageRect];
CGContextRef context = UIGraphicsGetCurrentContext();

CGContextSetRGBFillColor(context, 1.0,1.0,0.0,0.5);//set RGBA for color to fill in given area
CGContextSetRGBStrokeColor(context, 1.0, 1.0, 0.0, 1.0);//set RGBA for Border color to add in given area
CGRect rect=CGRectMake(5,5,10,10);//Here, Use the area to be coloured, rightnow i have used Rectangle
CGContextFillRect(context,rect);
CGContextStrokeRectWithWidth(context, rect, 3);//Set Border Width in 3rd argument
CGContextSaveGState(context);

UIImage *newimage = UIGraphicsGetImageFromCurrentImageContext();
[UIImagePNGRepresentation(newimage) writeToFile:FileName] atomically:YES];
UIGraphicsEndImageContext();

【讨论】:

我试过这个,接近我需要的,但不是完美的。看看我在我的问题中发布的图片以获得更好的想法。 在这里你必须为那个有界区域创建贝塞尔路径,并用那个替换矩形......就是这样【参考方案2】:

有多种方法可以做到这一点,其中一种可以在link中提到

另一种方法是您可以创建一个与您识别区域的大小相同的 UIView,使用您想要的任何颜色并将该视图添加为面部的子视图。

【讨论】:

只会在看起来不自然的原始图像上添加图层,我也尝试过。我需要一些方法来根据某个位置或框架改变 uiimage 内像素的颜色。【参考方案3】:

您可以拍摄图像,然后应用 CoreImage 滤镜来调整您定义的蒙版区域内的颜色。

This answer 概述了如何执行此操作。让它看起来更自然适用于学习如何创建对图像做你想做的过滤器。

【讨论】:

【参考方案4】:

您需要为特定的图像视图进行一些绘图自定义。这是一些 SO Q/A。

how to change the color of an individual pixel in uiimage

iPhone : How to change color of particular pixel of a UIImage?

【讨论】:

以上是关于如何在 iOS SDK 中的选定图像区域上应用滤镜/颜色的主要内容,如果未能解决你的问题,请参考以下文章

仅在 xCode 中的触摸区域应用高斯模糊滤镜

如何更改 iOS7 中的未选定的 tabbaritem 颜色

如何更改 iOS7 中的未选定的 tabbaritem 颜色

在ios中的图像上绘制渐变

IOS技术分享| 在iOS WebRTC 中添加美颜滤镜

如何在 iOS 中裁剪非矩形区域