欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Swift縮放并填充圖片功能的實現(xiàn)

 更新時間:2021年11月02日 11:56:24   作者:我為雙魚狂  
最近有一個需求,就是將圖片先等比例縮放到指定大小,然后將空余出來空間填充為黑色,返回指定大小的圖片。本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

摘要

直接操作圖片來實現(xiàn)它的縮放或者填充多余空間,首選 UIGraphicsBeginImageContext 函數(shù)來實現(xiàn),它就相當(dāng)于一個畫布,你甚至可以用它來涂鴉。

最近有一個需求,就是將圖片先等比例縮放到指定大小,然后將空余出來空間填充為黑色,返回指定大小的圖片。

這種直接操作圖片的需求,就要考慮使用 UIGraphicsBeginImageContext 函數(shù)實現(xiàn)。它可以理解為一個畫布,我們只需要把圖片放在畫布的對應(yīng)位置,把畫布的多余地方全部涂成黑色就完成。

實現(xiàn)

先看代碼,然后再分析:

func rescaleAndPading(_ image: UIImage, targetSize: CGSize) -> UIImage? {
        let max = max(image.width, image.height)
        let ratio = Float(targetSize.width) / Float(max)
        
        let (newWidth, newHeight) = (
 
            Int(Float(image.width) * ratio),
            Int(Float(image.height) * ratio)
        )
        
        let (tarWidth, tarHeight) = (
            
            Int(targetSize.width),
            Int(targetSize.height)
        )
        
        let deltaW = tarWidth - newWidth
        let deltaH = tarHeight - newHeight
        
        let (y, x) = (
            
            deltaH / 2,
            deltaW / 2
        )
        
        // 創(chuàng)建繪圖上下文環(huán)境
        UIGraphicsBeginImageContext(targetSize)
        let context = UIGraphicsGetCurrentContext()
        // 黃色背景
        context?.setFillColor(UIColor.yellow.cgColor)
        context?.fill(CGRect(x: 0, y: 0, width: tarWidth, height: tarHeight))
        image.draw(in: CGRect(x: x, y: y, width: newWidth, height: newHeight))
        // 獲取上下文里的內(nèi)容,將視圖寫入到新的圖像對象
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage
    }

看代碼,總結(jié)出邏輯很簡單,就是首先根據(jù)目標(biāo)的 size 來計算出需要縮放的比例(按照最大邊來處理),計算出圖片在畫布中的對應(yīng)位置和縮放后的寬高。

最后就是重頭戲,調(diào)用 UIGraphicsBeginImageContext 來繪畫。這里要留意幾個參數(shù)的設(shè)置:

  • UIGraphicsBeginImageContext(targetSize) 中的 targetSize 是設(shè)置畫布的大小。
  • image.draw(in:) 是圖片在畫布中的 rect 。
  • context 是畫布的對象
  • context?.setFillColor(_) 是設(shè)置畫布的顏色,若不設(shè)置,默認(rèn)為 black(黑色)
  • context?.fill()是設(shè)置畫布填充的 rect。

重點

如果是前面留意邏輯時,會發(fā)現(xiàn)邏輯中是先放置圖片,然后填充空余空間,但是代碼中是先填充全部空間,然后再放置圖片,這是為什么?

經(jīng)過測試后發(fā)現(xiàn),后繪制的區(qū)域會覆蓋掉先前已經(jīng)繪制的區(qū)域,所以代碼中的處理就是防止填充區(qū)域覆蓋圖片區(qū)域。

到此這篇關(guān)于Swift縮放并填充圖片功能的實現(xiàn)的文章就介紹到這了,更多相關(guān)Swift縮放填充圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能實例

    swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能實例

    這篇文章主要給大家介紹了關(guān)于swift4.0實現(xiàn)視頻播放、屏幕旋轉(zhuǎn)、倍速播放、手勢調(diào)節(jié)及鎖屏面板等功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • 詳解Swift語言中的類與結(jié)構(gòu)體

    詳解Swift語言中的類與結(jié)構(gòu)體

    這篇文章主要介紹了Swift語言中的類與結(jié)構(gòu)體,是Swift入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • Swift?并發(fā)修改Sendable?閉包實例詳解

    Swift?并發(fā)修改Sendable?閉包實例詳解

    這篇文章主要為大家介紹了Swift?并發(fā)修改Sendable?閉包實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 純swift實現(xiàn)ipad版簡單美團界面功能

    純swift實現(xiàn)ipad版簡單美團界面功能

    這篇文章主要為大家詳細介紹了純swift實現(xiàn)ipad版簡單美團界面功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 詳談swift內(nèi)存管理中的引用計數(shù)

    詳談swift內(nèi)存管理中的引用計數(shù)

    下面小編就為大家?guī)硪黄斦剆wift內(nèi)存管理中的引用計數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 判斷?ScrollView List?是否正在滾動詳解

    判斷?ScrollView List?是否正在滾動詳解

    這篇文章主要為大家介紹了判斷?ScrollView、List?是否正在滾動示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題詳解

    UICollectionView是iOS中比較常見的一個控件,這篇文章主要給大家介紹了關(guān)于iOS Swift UICollectionView橫向分頁滾動,cell左右排版問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Swift編程中實現(xiàn)希爾排序算法的代碼實例

    Swift編程中實現(xiàn)希爾排序算法的代碼實例

    希爾排序是對插入排序的一種改進版本,算法本身并不穩(wěn)定,存在優(yōu)化空間,這里我們來講一下希爾排序的大體思路及Swift編程中實現(xiàn)希爾排序算法的代碼實例
    2016-07-07
  • swift4 使用DrawerController實現(xiàn)側(cè)滑菜單功能的示例代碼

    swift4 使用DrawerController實現(xiàn)側(cè)滑菜單功能的示例代碼

    這篇文章主要介紹了swift4 使用DrawerController實現(xiàn)側(cè)滑功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • 關(guān)于Swift 4.1中的Codable改進詳解

    關(guān)于Swift 4.1中的Codable改進詳解

    這篇文章主要給大家介紹了關(guān)于Swift 4.1中的Codable改進的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-02-02

最新評論