DDGScreenShot—iOS 截取圖片的任意部分

寫(xiě)在前面

DDGScreenShot 庫(kù)提供了截取任意圖片的功能郊艘,
支持手勢(shì)截圖伊磺,當(dāng)然焚辅,輸入任意的區(qū)域也可以浊仆,下面看看具體的代碼

整合成一個(gè)三方庫(kù)记焊,以下只是部分代碼酣溃,詳細(xì)代碼及demo請(qǐng)見(jiàn)瘦穆,github地址https://github.com/dudongge/DDGScreenShot

DDGScreenShot 所有功能演示

image
image

代碼如下:

方法封裝
/**
     ** 用手勢(shì)截圖(截取圖片的任意部分)
     - imageView --傳圖片
     - bgView --截圖背景
     */
    public func shotImage(imageView: UIImageView?,bgView: UIView?) -> UIImage? {
        if imageView == nil {
            return nil
        }
        //開(kāi)啟一個(gè)位圖上下文
        UIGraphicsBeginImageContextWithOptions((imageView?.bounds.size)!, false, 0.0)
        //用貝塞爾繪制
        let path = UIBezierPath(rect: (bgView?.frame)!)
        //開(kāi)始截取
        path.addClip()
        //把ImageView的內(nèi)容渲染上下文當(dāng)中.
        let imgectx = UIGraphicsGetCurrentContext()
        imageView?.layer.render(in: imgectx!)
        //從上下文中得到圖片
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        //關(guān)閉上下文
        UIGraphicsEndImageContext()
        return newImage
    }
    
    異步方法封裝
    /**
     ** 異步用手勢(shì)截圖(截取圖片的任意部分)
     - imageView --傳圖片
     - bgView --截圖背景
     - parameter completed:    異步完成回調(diào)(主線(xiàn)程回調(diào))
     */
    public func async_shotImage(imageView: UIImageView?,bgView: UIView?,completed:@escaping (UIImage?) -> ()) -> Void {
        DispatchQueue.global().async{
            let newImage = self.shotImage(imageView: imageView, bgView: bgView)
            DispatchQueue.main.async(execute: {
                completed(newImage)
            })
        }
    }

使用代碼

        imageView = UIImageView()
        self.view.addSubview(imageView!)
        imageView?.image = UIImage(named: "0")
        imageView?.isUserInteractionEnabled = true
        imageView?.frame = CGRect(x: 0, y: 0, width: width, height: height)
        
       
        let pan = UIPanGestureRecognizer(target: self, action: #selector(panTouch(startPan:)))
        imageView?.addGestureRecognizer(pan)
        
        func setBgView() {
        if bgView == nil {
            bgView = UIView()
        }
        self.view.addSubview(bgView!)
        bgView?.backgroundColor = UIColor.black
        bgView?.alpha = 0.7
    }
    
    @objc func panTouch(startPan: UIPanGestureRecognizer) {
        let shotPan = startPan.location(in: imageView)
        //獲取起始點(diǎn)
        self.setBgView()
        if startPan.state == .began {
            //獲取當(dāng)前點(diǎn)
            self.startPoint = shotPan
        } else if startPan.state == .changed {
            //獲取當(dāng)前點(diǎn)
            let X = startPoint.x
            let Y = startPoint.y
            let W = shotPan.x - startPoint.x
            let H = shotPan.y - startPoint.y
            let rect = CGRect(x: X, y: Y, width: W, height: H)
            bgView?.frame = rect
        } else if startPan.state == .ended {
            
           let newImage = DDGManage.share.shotImage(imageView: imageView, bgView: bgView)
            bgView?.removeFromSuperview()
            bgView = nil
        let imageView1 = UIImageView()
        self.view.addSubview(imageView1)
        imageView1.image = newImage
        imageView1.frame = CGRect(x: 100, y: 200, width: 200, height: 200)
       }
    }
### 這樣就可以當(dāng)手勢(shì)停止就可以得到相應(yīng)區(qū)域的圖片

結(jié)束語(yǔ)

大功告成,此代碼已經(jīng)上傳到githup[DDGScreenShot](https://github.com/dudongge/DDGScreenShot)
[link](https://github.com/dudongge/DDGScreenShot)
當(dāng)然這只是這個(gè)庫(kù)的功能的一小部分
想看更多功能赊豌,可以去github上下載扛或,如果對(duì)您有幫助,希望您不吝給個(gè)star.

歡迎查看DDGScreenShot

其余功能如下

  1. (一)DDGScreenShot — 復(fù)雜屏幕截屏(如view ScrollView webView wkwebView)
  2. (二)DDGScreenShot--iOS 圖片處理--多圖片拼接
  3. (三)DDGScreenShot--iOS 圖片裁剪碘饼,切圓角熙兔,加邊框悲伶,你還用cornerRadius,還有更高級(jí)的用法
  4. (四)DDGScreenShot—圖片擦除功能
  5. (五)DDGScreenShot—截取圖片的任意部分
  6. (六)DDGScreenShot —圖片加各種濾鏡高逼格操作
  7. (七)DDGScreenShot —圖片加高斯模糊住涉,老電影效果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末麸锉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舆声,更是在濱河造成了極大的恐慌花沉,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纳寂,死亡現(xiàn)場(chǎng)離奇詭異主穗,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)毙芜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)忽媒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人腋粥,你說(shuō)我怎么就攤上這事晦雨。” “怎么了隘冲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵闹瞧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我展辞,道長(zhǎng)奥邮,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任罗珍,我火速辦了婚禮洽腺,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘覆旱。我一直安慰自己蘸朋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布扣唱。 她就那樣靜靜地躺著藕坯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪噪沙。 梳的紋絲不亂的頭發(fā)上炼彪,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音曲聂,去河邊找鬼霹购。 笑死,一個(gè)胖子當(dāng)著我的面吹牛朋腋,可吹牛的內(nèi)容都是我干的齐疙。 我是一名探鬼主播膜楷,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼贞奋!你這毒婦竟也來(lái)了赌厅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤轿塔,失蹤者是張志新(化名)和其女友劉穎特愿,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體勾缭,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揍障,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俩由。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毒嫡。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖幻梯,靈堂內(nèi)的尸體忽然破棺而出兜畸,到底是詐尸還是另有隱情,我是刑警寧澤碘梢,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布咬摇,位于F島的核電站,受9級(jí)特大地震影響煞躬,放射性物質(zhì)發(fā)生泄漏肛鹏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一恩沛、第九天 我趴在偏房一處隱蔽的房頂上張望龄坪。 院中可真熱鬧,春花似錦复唤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至总放,卻和暖如春呈宇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背局雄。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工甥啄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炬搭。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓蜈漓,卻偏偏與公主長(zhǎng)得像穆桂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子融虽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容