在做項目的時候碰到了一個需求,就是設(shè)計做的圖片的顏色和需求不符合,需要把圖片的顏色改變一下。下面是改變圖片顏色的方法帚湘。
首先我們創(chuàng)建一個UIImage的Category,名為ChangeColor甚淡。這個名為ChangeColor的Category只有一個方法大诸,即-(UIImage*)imageChangeColor:(UIColor*)color
。這個方法的具體實現(xiàn)如下:
#import "UIImage+ChangeColor.h"
@implementation UIImage (ChangeColor)
//繪圖
-(UIImage*)imageChangeColor:(UIColor*)color
{
//獲取畫布
UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0f);
//畫筆沾取顏色
[color setFill];
CGRect bounds = CGRectMake(0, 0, self.size.width, self.size.height);
UIRectFill(bounds);
//繪制一次
[self drawInRect:bounds blendMode:kCGBlendModeOverlay alpha:1.0f];
//再繪制一次
[self drawInRect:bounds blendMode:kCGBlendModeDestinationIn alpha:1.0f];
//獲取圖片
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
@end
使用方法:
首先我們看一下不改變顏色時贯卦,真實的圖片顏色
UIImage *image = [UIImage imageNamed:@"qr-code"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
[imageView setFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:imageView];
得到的圖片:
原圖.png
然后我們改變圖片的顏色為綠色:
UIImage *image = [UIImage imageNamed:@"qr-code"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:[image imageChangeColor:[UIColor blueColor]]];
[imageView setFrame:CGRectMake(100, 100, 100, 100)];
[self.view addSubview:imageView];
運行結(jié)果:
改變顏色.png
2019年3月29更新
iOS7.0之后资柔,UIImage有一個新增方法imageWithRenderingMode:
,通過它設(shè)置圖片的渲染模式撵割,再通過設(shè)置tintcolor贿堰,就可以改變圖片顏色。其中參數(shù)部分UIIMageRenderingMode有三個枚舉對應不同的渲染模式:
UIImageRenderingModeAutomatic // 根據(jù)圖片的使用環(huán)境和所處的繪圖上下文自動調(diào)整渲染模式睁枕。
UIImageRenderingModeAlwaysOriginal // 始終繪制圖片原始狀態(tài)官边,不使用Tint Color沸手。
UIImageRenderingModeAlwaysTemplate // 始終根據(jù)Tint Color繪制圖片外遇,忽略圖片的顏色信息注簿。
使用實例:
UIImage *image = [UIImage imageNamed:@"qr-code"];
self.ImageView.image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
[self.ImageView setTintColor:[UIColor redColor]];