Ios 如何更改UIImage的颜色

Ios 如何更改UIImage的颜色,ios,uiimage,uicolor,Ios,Uiimage,Uicolor,我不想更改UIImage的背景色, 而是改变整个图像的颜色 因为我有标准表单,可以从popover移动到视图。 在我的应用程序中,可以将图像修补为一个大图像,即一张表。 此外,我想把颜色改成白棕色或其他颜色。 但问题是:我只能改变背景颜色 有没有办法改变UIImage的颜色 提前感谢您公认的答案是正确的,但是对于UIImageView,有一种更简单的方法: UIImage *image = [UIImage imageNamed:@"triangle.png"]; CGRect rect =

我不想更改UIImage的背景色,
而是改变整个图像的颜色

因为我有标准表单,可以从popover移动到视图。
在我的应用程序中,可以将图像修补为一个大图像,即一张表。
此外,我想把颜色改成白棕色或其他颜色。

但问题是:我只能改变背景颜色
有没有办法改变UIImage的颜色


提前感谢您

公认的答案是正确的,但是对于
UIImageView
,有一种更简单的方法:

UIImage *image = [UIImage imageNamed:@"triangle.png"];

CGRect rect = CGRectMake(0, 0, image.size.width, image.size.height);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClipToMask(context, rect, image.CGImage);
CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

UIImage *flippedImage = [UIImage imageWithCGImage:img.CGImage 
                                            scale:1.0 orientation: UIImageOrientationDownMirrored];

yourUIImageView.image = flippedImage;
Obj-C:

UIImage *image = [UIImage imageNamed:@"foo.png"];
theImageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];
let theImageView = UIImageView(image: UIImage(named:"foo")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))
theImageView.tintColor = UIColor.redColor()
let theImageView = UIImageView(image: UIImage(named:"foo")!.withRenderingMode(.alwaysTemplate))
theImageView.tintColor = UIColor.red
Swift 2:

UIImage *image = [UIImage imageNamed:@"foo.png"];
theImageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];
let theImageView = UIImageView(image: UIImage(named:"foo")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))
theImageView.tintColor = UIColor.redColor()
let theImageView = UIImageView(image: UIImage(named:"foo")!.withRenderingMode(.alwaysTemplate))
theImageView.tintColor = UIColor.red
Swift 3:

UIImage *image = [UIImage imageNamed:@"foo.png"];
theImageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[theImageView setTintColor:[UIColor redColor]];
let theImageView = UIImageView(image: UIImage(named:"foo")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))
theImageView.tintColor = UIColor.redColor()
let theImageView = UIImageView(image: UIImage(named:"foo")!.withRenderingMode(.alwaysTemplate))
theImageView.tintColor = UIColor.red

您也可以使用以下代码在swift中执行此操作:

// language: Swift
let tintedImage = UIImageView(image: UIImage(named:"whatever")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate))

tintedImage.tintColor = UIColor.redColor()
细节
  • 代码10.2.1(10E1001),Swift 5
路1。扩展UIImage 资料来源:

用法

let imageView = UIImageView(frame: CGRect(x: 40, y: 250, width: 40, height: 40))
view.addSubview(imageView)
// Set color
imageView.image = UIImage(imageName: "Apple")?.imageWithColor(newColor: UIColor.blue)
// Reset color
//imageView.image = imageView.image?.imageWithColor(newColor: nil)
let imageView = UIImageView(frame: CGRect(x: 40, y: 250, width: 40, height: 40))
view.addSubview(imageView)
imageView.image = UIImage(imageName: "Apple")
// Set color
imageView.imageColor = UIColor.green
// Reset color
//imageView.imageColor = nil
路2。扩展UIImageView 用法

let imageView = UIImageView(frame: CGRect(x: 40, y: 250, width: 40, height: 40))
view.addSubview(imageView)
// Set color
imageView.image = UIImage(imageName: "Apple")?.imageWithColor(newColor: UIColor.blue)
// Reset color
//imageView.image = imageView.image?.imageWithColor(newColor: nil)
let imageView = UIImageView(frame: CGRect(x: 40, y: 250, width: 40, height: 40))
view.addSubview(imageView)
imageView.image = UIImage(imageName: "Apple")
// Set color
imageView.imageColor = UIColor.green
// Reset color
//imageView.imageColor = nil
全样本 别忘了把上面的所有代码都粘贴到这里

故事板

结果

Swift+界面生成器(故事板)

如果在界面生成器中添加UIImageView:

myIcon.image = myIcon.image!.withRenderingMode(UIImageRenderingMode.alwaysTemplate)
myIcon.tintColor = UIColor.red // your color
其中,
myIcon
是故事板的一个出口,例如:
@IBOutlet弱var myIcon:UIImageView

extension UIImageView{
    func changePngColorTo(color: UIColor){
        guard let image =  self.image else {return}
        self.image = image.withRenderingMode(.alwaysTemplate)
        self.tintColor = color
    }
}
使用:


更改UIImageView中图像的颜色:

public extension UIImageView {
    func tintImage(color: UIColor) {
        image = image?.tint(color: color)
    }
}
只需调用以下方法:

imageView.tintImage(color: .red)
增加

您也可以通过按钮执行此操作:

UIImage *image = [UIImage imageNamed:@"foo.png"];
[myButton setImage:[image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate] forState:UIControlStateNormal];
[myButton setTintColor:[UIColor redColor]];

你真的需要更详细地解释你想做什么。图像视图显示一幅图像,那么你说“改变颜色”是什么意思呢?编辑了我的帖子。我希望这是可以理解的。非常感谢。我只是对imageView.image=img的语句有问题;但随后将其更改为[testTest.newView setImage:img];覆盖?你什么意思?我有一个png,它是一个三角形。因此,如果我使用你的方法,不是三角形,而是图像的背景。最后没有三角形,只有一个正方形,它的颜色是我编辑过的答案,但是下次你的问题应该可以理解。真的很难理解你想要什么。谢谢。我只是想了解一下。我的一个问题是它是如何开始的?完美的答案,但是我们能用新的颜色填充内部框架而不改变
UIImage
?@YogeshSuthar“border color”是什么意思?图像的边框颜色。假设我有一个边框颜色为灰色的图像。这个灰色不应该改变,但内部颜色应该改变。@skywinder,有没有办法检测颜色并改变特定的颜色?就像我有两种颜色的图像白色和红色。我只想更改图像的白色部分。有可能吗?@MrugeshTank使用此方法-没有。它只是从图像创建遮罩,并用颜色填充。因此,您需要一些高级的图像处理库,这不会改变图像的颜色。相反,图像视图使用不同的颜色渲染它。