Swift 實現更改圖片的顏色

weixin_34185364發表於2016-10-20

1.下面這段程式碼可以更改圖片的顏色,但是隻能更為只用顏色.比如你是灰色的圖片,你想更改為紅色或是其他顏色都可以用如下程式碼實現:

import UIKit

extension UIImage {

func imageWithTintColor(tintColor:UIColor, blendMode:CGBlendMode) -> UIImage {

UIGraphicsBeginImageContextWithOptions(self.size, false, 0.0)

tintColor.setFill()

let bounds = CGRectMake(0, 0, self.size.width, self.size.height)

UIRectFill(bounds)

self.drawInRect(bounds, blendMode: blendMode, alpha: 1.0)

if blendMode != .DestinationIn {

self.drawInRect(bounds, blendMode: .DestinationIn, alpha: 1.0)

}

let tintedImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return tintedImage

}

}

2.直接在需要更給圖片顏色的控制器中直接使用:

import UIKit

class ViewController: UIViewController {

@IBOutlet weak var imageV: UIImageView!

override func viewDidLoad() {

super.viewDidLoad()

let img = UIImage(named: "圖片")?.imageWithTintColor(UIColor.redColor(), blendMode: .Overlay)

imageV.image = img

}

override func didReceiveMemoryWarning() {

super.didReceiveMemoryWarning()

// Dispose of any resources that can be recreated.

}

}

3.好吧你只要使用如上程式碼就可以實現圖片更改顏色了.

4.什麼?你告訴我蘋果官方有個更簡單的改變圖片的顏色屬性。

UIImageRenderingModeAlwaysTemplate 是UIImage渲染模式renderingMode列舉型別中的其中一個,除去這個外還有另外兩個

UIImageRenderingModeAutomatic        // 根據圖片的使用環境和所處的繪圖上下文自動調整渲染模式(預設屬性)。

UIImageRenderingModeAlwaysOriginal  // 始終繪製圖片原始狀態,設定Tint Color屬性無效。

UIImageRenderingModeAlwaysTemplate  // 始終根據Tint Color繪製圖片(顏色)顯示,忽略圖片的顏色資訊(也就是圖片原本的東西是不顯示的)。

呼叫此屬性

UIImage *image = [UIImage imageNamed:@"111.jpg"];

image = [image imageWithRenderingMode: UIImageRenderingModeAlwaysTemplate];

有何用處

個人經常用到的有兩種

A

美工切出來一個返回按鈕  顏色是黃色 但有一個頁面需要這個返回按鈕是紅色  那就沒必要美工再切一張紅色的按鈕,而是利用UIImageRenderingModeAlwaysTemplate這個屬性把黃色按鈕改成紅色

例  程式碼

UIImage *image = [UIImage imageNamed:@"111.jpg"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];

imageView.image = image;

imageView.tintColor = [UIColor purpleColor];

[self.view addSubview:imageView];

B

UIButton 的點選狀態  因為UIButton設定背景色  點選UIButton  是沒有點選色的  但是UIButton的背景圖片有點選色 那就可以利用UIImageRenderingModeAlwaysTemplate這個屬性改變任意一張圖片的顏色為我們需要的那個顏色

例  程式碼

UIImage *image = [UIImage imageNamed:@"111.jpg"];

image = [image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];

btn.tintColor = [UIColor brownColor];

[btn setBackgroundImage:image forState:UIControlStateNormal];

[self.view addSubview:btn];

相關文章