国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS 圖片裁剪的實(shí)現(xiàn)方法

2020-02-19 15:47:22
字體:
供稿:網(wǎng)友

我經(jīng)常看到網(wǎng)絡(luò)上有各種關(guān)于圖片裁剪的文章,就在武林技術(shù)頻道小編做數(shù)字圖像處理之前,寫了一個(gè)剪輯算法,本文主要介紹了iOS 圖片裁剪的實(shí)現(xiàn)方法,需要的朋友可以參考以下內(nèi)容。

通過 CGImage 或 CIImage 裁剪

UIImagecgImageciImage屬性,分別可以獲得CGImageCIImage對象。CGImageCIImage對象都有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}

CGImage來說,傳入的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的裁剪方法不同。

簡單試了幾次,發(fā)現(xiàn)通過 CGImage 裁剪的 CPU 占用率比通過位圖裁剪要低。僅從性能角度考慮,推薦使用前者。如果希望裁剪出來的圖片不超出原圖區(qū)域,也推薦使用前者。如果需要繪制其他的內(nèi)容(比如其他形狀、顏色,或繪制的內(nèi)容超出原圖區(qū)域),則要使用后者。

以上就是關(guān)于iOS 圖片裁剪的實(shí)現(xiàn)方法,在選擇學(xué)習(xí)的時(shí)候,我們要自己分辨是否對自己有用,不要盲目跟隨哦。希望武林技術(shù)頻道小編的介紹對大家有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 炉霍县| 安仁县| 济南市| 漠河县| 延津县| 九江县| 波密县| 莒南县| 乌兰浩特市| 新巴尔虎左旗| 永定县| 资中县| 旺苍县| 尉犁县| 乡城县| 南雄市| 阳江市| 乡城县| 武邑县| 双峰县| 鹤庆县| 吐鲁番市| 习水县| 宁津县| 高碑店市| 阿拉善盟| 营口市| 永登县| 淮安市| 织金县| 宜良县| 依安县| 九江县| 讷河市| 屏东县| 界首市| 鄢陵县| 萨迦县| 阜新| 封开县| 昔阳县|