iOS 圖片裁剪的實(shí)現(xiàn)方法
iOS 圖片裁剪方法,主要有兩種,一起來(lái)看下。
通過 CGImage 或 CIImage 裁剪
UIImage有cgImage和ciImage屬性,分別可以獲得CGImage和CIImage對(duì)象。CGImage和CIImage對(duì)象都有cropping(to:)方法,傳入CGRect的參數(shù)表示要裁剪的區(qū)域(采用UIImage的坐標(biāo))。
static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? {
if let cgImage = image.cgImage,
let croppedCgImage = cgImage.cropping(to: rect) {
return UIImage(cgImage: croppedCgImage)
} else if let ciImage = image.ciImage {
let croppedCiImage = ciImage.cropping(to: rect)
return UIImage(ciImage: croppedCiImage)
}
return nil
}
對(duì)CGImage來(lái)說,傳入的CGRect參數(shù)如果完全不在原圖區(qū)域內(nèi),cropping(to:)方法返回空;如果有部分在原圖區(qū)域內(nèi),cropping(to:)方法返回在原圖區(qū)域部分的CGImage。
通過位圖(Bitmap)裁剪
通過位圖重新繪制圖片,也可以獲得裁剪之后的圖片。
static func cropImage(_ image: UIImage, withRect rect: CGRect) -> UIImage? {
UIGraphicsBeginImageContext(rect.size)
guard let context = UIGraphicsGetCurrentContext() else { return nil }
context.translateBy(x: -rect.minX, y: -rect.minY)
image.draw(at: .zero)
let croppedImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return croppedImage
}
位圖大小為需要裁剪區(qū)域CGRect的大小size。用原圖繪制,為了使裁剪區(qū)域正好在位圖區(qū)域,需要進(jìn)行坐標(biāo)位移context.translateBy(x: -rect.minX, y: -rect.minY)。
如果傳入的CGRect參數(shù)有部分或全部不在原圖區(qū)域內(nèi),則超出原圖區(qū)域的部分也會(huì)被繪制(繪制為透明),這與CGImage的裁剪方法不同。
簡(jiǎn)單試了幾次,發(fā)現(xiàn)通過 CGImage 裁剪的 CPU 占用率比通過位圖裁剪要低。僅從性能角度考慮,推薦使用前者。如果希望裁剪出來(lái)的圖片不超出原圖區(qū)域,也推薦使用前者。如果需要繪制其他的內(nèi)容(比如其他形狀、顏色,或繪制的內(nèi)容超出原圖區(qū)域),則要使用后者。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
iOS中設(shè)置清除緩存功能的實(shí)現(xiàn)方法
清除緩存基本上都是在設(shè)置界面的某一個(gè)Cell,于是我們可以把清除緩存封裝在某一個(gè)自定義Cell中,現(xiàn)在位大家介紹一種最基礎(chǔ)的清除緩存的方法,感興趣的朋友一起看看吧2017-07-07iOS實(shí)現(xiàn)應(yīng)用內(nèi)切換語(yǔ)言及字體大?。7挛⑿牛?/a>
這篇文章主要給大家介紹了關(guān)于利用iOS如何實(shí)現(xiàn)應(yīng)用內(nèi)切換語(yǔ)言及字體大小的相關(guān)資料,實(shí)現(xiàn)的效果類似我們經(jīng)常在微信中見到的,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Flutter?GetPageRoute實(shí)現(xiàn)嵌套導(dǎo)航學(xué)習(xí)
這篇文章主要為大家介紹了Flutter?GetPageRoute實(shí)現(xiàn)嵌套導(dǎo)航的示例學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
iOS開發(fā)中CAlayer層的屬性以及自定義層的方法
這篇文章主要介紹了iOS開發(fā)中CAlayer層的屬性以及自定義層的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2015-11-11
Swift實(shí)現(xiàn)iOS應(yīng)用中短信驗(yàn)證碼倒計(jì)時(shí)功能的實(shí)例分享
這篇文章主要介紹了Swift實(shí)現(xiàn)iOS應(yīng)用中短信驗(yàn)證碼倒計(jì)時(shí)功能的實(shí)例分享,開啟和關(guān)閉倒計(jì)時(shí)功能的步驟實(shí)現(xiàn)比較關(guān)鍵,需要的朋友可以參考下2016-04-04
iOS開發(fā)中Date Picker和UITool Bar控件的使用簡(jiǎn)介
這篇文章主要介紹了iOS開發(fā)中Date Picker和UITool Bar控件的使用簡(jiǎn)介,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01

