天天看點

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)

一,ImageHelper介紹 ImageHelper(原來叫AFImageHelper)是使用Swift語言編寫的處理圖檔的類庫,通過對  UIImage  和  UIImageView  的擴充。使其增加了對圖檔的壓縮、顔色、漸變、裁剪等操作方法,以及支援使用緩存從網站上擷取圖檔。

二,ImageHelper的配置 (1)從GitHub上把最新代碼下載下傳下來,位址: https://github.com/melvitax/ImageHelper (2)将  ImageHelper.swift、 ImageVIewExtension.swift 添加到項目中即可

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)

三,UIImageView擴充相關的使用樣例

1,讓UIImageView支援直接通過URL位址擷取圖檔

(1)可以設定是否需要緩存圖檔(預設是緩存)。是的話,每次網絡請求時,會先自動判斷下是否本地有緩存圖檔,如果有則直接使用緩存圖檔。對于新加載下來的圖檔則會緩存起來,供下次使用。

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1

imageView1.imageFromURL(

"http://www.hangge.com/blog/images/logo.png"

, placeholder: 

UIImage

())

(2)支援設定占位符圖檔( placeholder),在網絡圖檔未加載完畢的時候顯示。

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView1.imageFromURL(

"http://www.hangge.com/blog/images/logo.png"

,

placeholder: 

UIImage

(named: 

"loading"

)!)

(3)還可以設定圖檔加載完畢後是否需要淡入顯示(預設是true)。

1 2 3

imageView1.imageFromURL(

"http://www.hangge.com/blog/images/logo.png"

,

placeholder: 

UIImage

(named: 

"loading"

)!,

fadeIn: 

true

)

(4)可以在圖檔加載成功的回調函數中做一些後續處理。

1 2 3 4 5 6 7

imageView1.imageFromURL(

"http://www.hangge.com/blog/images/logo.png"

,

placeholder: 

UIImage

(named: 

"loading"

)!, fadeIn: 

true

, shouldCacheImage: 

true

) {

(image: 

UIImage

?) 

in

if

image != 

nil

{

print

(

"圖檔加載成功!"

)

}

}

四,UIImage擴充相關的使用樣例

1,通過URL位址擷取圖檔

同  UIImageView 一樣, UIImage 也可以通過URL擷取網絡圖檔。同樣支援占位符圖檔,圖檔緩存,加載完畢回調。

(其實UIImageView的url圖檔加載内部調用的就是   UIImage.image(fromURL: url) 方法)

1 2 3 4 5 6 7

let

url = 

"http://www.hangge.com/blog/images/logo.png"

UIImage

.image(fromURL: url, placeholder: 

UIImage

(), shouldCacheImage: 

true

) {

(image: 

UIImage

?) 

in

if

image != 

nil

{

self

.imageView1.image = image

}

}

2,通過顔色生成UIImage

(1)使用純色

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1

UIImage

(color: 

UIColor

.orange, size: 

CGSize

(width: 55, height: 30))

(2)使用線性漸變色

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

let

gradientColors = [

UIColor

.orange, 

UIColor

.red]

UIImage

(gradientColors: gradientColors, size: 

CGSize

(width: 55, height: 30))

(3)使用放射性漸變色

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2 3

UIImage

(startColor: 

UIColor

.orange, endColor: 

UIColor

.red,

radialGradientCenter: 

CGPoint

(x: 0.5, y: 0.5), radius: 1,

size:  

CGSize

(width: 55, height: 30))

3,給圖檔覆寫一層漸變色

下面給原始的UIImage添加一個半透明的黃褐色漸變,使圖檔有種添加老照片濾鏡的效果。 (預設的混合模式是  CGBlendMode.Normal ,也可以設定成其他的  blendMode )

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2 3

let

gradientColors = [

UIColor

(red: 0.996, green: 0.769, blue: 0.494, alpha: 1.0),

UIColor

(red: 0.969, green: 0.608, blue: 0.212, alpha: 0.2)]

imageView2.image = 

UIImage

(named: 

"beach"

)?.apply(gradientColors: gradientColors)

4,通過Text文本生成UIImage

除了設定文字内容,還可以設定文字大小,文字顔色和背景顔色。

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2 3 4 5 6 7 8 9 10

//假設界面上的UIImageView尺寸是180*80

let

textSize = 46 * 

UIScreen

.main.scale

let

imageWidth = 180 * 

UIScreen

.main.scale

let

imageHeight = 80 * 

UIScreen

.main.scale

if

let

image = 

UIImage

(text: 

"hangge"

, font: 

UIFont

.systemFont(ofSize: textSize),

color: 

UIColor

.white, backgroundColor: 

UIColor

.orange,

size: 

CGSize

(width: imageWidth, height: imageHeight)){

imageView1.image = image

}

5,對任意UIView對象截圖(Screenshot)

1 2 3

//将目前頁面轉換成image

let

image = 

UIImage

(fromView: 

self

.view)

imageView2.image = image

6,透明層相關(alpha layer)

1 2 3 4 5

//判斷圖檔是否有透明圖層

UIImage

(named: 

"logo"

)?.hasAlpha

//給圖檔添加透明塗層

UIImage

(named: 

"logo"

)?.applyAlpha()

7,給圖檔增加外邊距(添加透明邊框)

下面樣例上下兩個imageView的尺寸是一樣的,樣式都是Aspect Fit。下面一個使用的image添加了透明邊距。

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView1.image = 

UIImage

(named: 

"beach"

)

imageView2.image = 

UIImage

(named: 

"beach"

)?.apply(padding: 50)

8,圖檔裁剪

(1)自定義裁剪位置和尺寸

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2 3 4

imageView1.image = 

UIImage

(named: 

"beach"

)

let

rect = 

CGRect

(x: 0, y: 0, width: 500, height: 200)

imageView2.image = 

UIImage

(named: 

"beach"

)?.crop(bounds: rect)

(2)自動裁剪成正方形

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView1.image = 

UIImage

(named: 

"beach"

)

imageView2.image = 

UIImage

(named: 

"beach"

)?.cropToSquare()

9,調整尺寸大小

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView1.image = 

UIImage

(named: 

"beach"

)

imageView2.image = 

UIImage

(named: 

"beach"

)?.resize(toSize: 

CGSize

(width: 300, height: 400))

由于不同裝置的縮放比例不同,可以通過  screen scale 乘以固定的寬高的辦法動态設定尺寸,保證各種裝置下顯示正常,不會模糊。(對于 padding、 borders的設定也可以用此方法)

1 2 3

let

width = 300 * 

UIScreen

.main.scale

let

height = 400 * 

UIScreen

.main.scale

let

image = 

UIImage

(named: 

"myImage"

)?.resize(toSize: 

CGSize

(width: width, height: height))

10,生成圓角或圓形圖檔

(1)圓角圖檔

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1

imageView2.image = 

UIImage

(named: 

"beach"

)?.roundCorners(cornerRadius: 70)

(2)帶邊框的圓角圖檔

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView1.image = 

UIImage

(named: 

"beach"

)?.roundCorners(cornerRadius: 70, border: 200,

color: 

UIColor

.orange)

(3)圓形圖檔

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1

imageView2.image = 

UIImage

(named: 

"beach"

)?.roundCornersToCircle()

(4)帶邊框的圓形圖檔

Swift - 圖檔處理庫ImageHelper詳解(擴充UIImage,UIImageView)
1 2

imageView2.image = 

UIImage

(named: 

"beach"

)?.roundCornersToCircle(withBorder: 40,

color: 

UIColor

.orange)

原文出自: www.hangge.com   轉載請保留原文連結: http://www.hangge.com/blog/cache/detail_975.html