從 playground 調色去背圖片

幫可愛的小熊維尼變臉吧,變成格紋粉紅維尼熊 ~

程式

import UIKit

let winnieImage = UIImage(named: "winnie.png")
let winnieImageView = UIImageView(image: winnieImage)
let patternImageView = UIImageView(image: UIImage(named: "pattern.jpg"))
patternImageView.frame = winnieImageView.frame
patternImageView.addSubview(winnieImageView)
patternImageView

說明

1 將圖片去背

圖片來源

(1) 方法一: 從 Mac 的 Preview App 去背。

(2) 方法二: 從線上網站去背

將圖片去背顯示在 image view 時,image view 的 Background(背景顏色)可控制去背區塊的顏色。

2 將圖片加到 playground

3 加入 UIKit 函式庫。

import UIKit

UI 相關的東西定義在 UIKit framework 裡。加入 UIKit,我們才能撰寫 UI 相關的程式。

4 產生顯示可愛維尼的 image view。

let winnieImage = UIImage(named: "winnie.png")
let winnieImageView = UIImageView(image: winnieImage)

說明

畫面上顯示圖片的元件型別是 UIImageView,比方以下 storyboard 畫面的例子,從它的 Class 類別可知它的型別是 UIImageView。

畫面上顯示圖片的元件型別是 UIImageView ,UIImageView 顯示的圖片則由型別 UIImage 的資料設定。UIImage 裡有圖片的資訊,但他並不是畫面上的東西,畫面上的東西會是 view,像 label,button,image view 才是能顯示在畫面上的 view。

關於 UIImage & UIImageView 的差別,我們也可以想一下 UILabel 的例子。 畫面上顯示文字的元件型別是 UILabel ,UILabel 顯示的文字則由型別 String 的資料設定。

因此我們利用 UIImage(named: "winnie.png") 生成圖片,存在 winnieImage,然後在生成 UIImageView 時傳入 winnieImage。

let winnieImageView = UIImageView(image: winnieImage)

這裡要特別注意,不要打錯圖片名字。打錯名字的話,圖片將生不出來,可愛的維尼就無法登場了。

5 設定維尼的臉色,變成 Tiffany Blue !

設定 image view 的背景顏色。

winnieImageView.backgroundColor = UIColor(red: 10/255, green: 186/255, blue: 181/255, alpha: 1)

完整程式。

import UIKit

let winnieImage = UIImage(named: "winnie.png")
let winnieImageView = UIImageView(image: winnieImage)
winnieImageView.backgroundColor = UIColor(red: 10/255, green: 186/255, blue: 181/255, alpha: 1)

5 讓小熊維尼變成文青的格紋臉。

將格紋圖片加到 playground。

ps: 搜尋背景圖片的好網站 Freepik

移除剛剛設定 backgroundColor 顏色的程式,將維尼圖片加到格紋圖片上。

import UIKit

let winnieImage = UIImage(named: "winnie.png")
let winnieImageView = UIImageView(image: winnieImage)
let patternImageView = UIImageView(image: UIImage(named: "pattern.jpg"))
patternImageView.frame = winnieImageView.frame
patternImageView.addSubview(winnieImageView)
patternImageView

說明

let patternImageView = UIImageView(image: UIImage(named: "pattern.jpg"))

產生顯示圖片 pattern.jpg 的 image view,存在常數 patternImageView。

patternImageView.frame = winnieImageView.frame

將 patternImageView 的位置大小設成跟 winnieImageView 一樣。

patternImageView.addSubview(winnieImageView)

將維尼圖片 winnieImageView 放在格紋圖片 patternImageView 上,winnieImageView 成為 patternImageView 的 subview。

addSubview 是 UIView 的方法。由於 patternImageView 的型別是 UIImageView,而 UIImageView 又繼承 UIView,因此 patternImageView 也可以呼叫 addSubview。

關於 addSubview 的說明,可參考以下連結。

patternImageView

最後要顯示結果時,記得從 patternImageView 觀看結果,因為 patternImageView 上裝著 winnieImageView,所以觀看 winnieImageView 才能同時看到格紋 & 維尼。相反的,如果觀看 winnieImageView 的內容,將只能看到維尼,看不到背後的格紋。

6 改變格紋顏色。

import UIKit

let winnieImage = UIImage(named: "winnie.png")
let winnieImageView = UIImageView(image: winnieImage)
let patternImageView = UIImageView(image: UIImage(named: "pattern.jpg"))
patternImageView.frame = winnieImageView.frame
patternImageView.addSubview(winnieImageView)
winnieImageView.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.4)
patternImageView

將 winnieImageView 設成透明度 0.4 的紅色,讓它跟背後的格紋圖片混合,變成粉紅格紋維尼 ~。

進階練習

調整顏色的 hue,saturation & brightness。

作品集

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS / Flutter App 開發教室

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com