iOS自定義相機(jī)拍身份證照片裁剪圖片截出身份證大小

最近在做一個(gè)項(xiàng)目,有身份證照片的需求,然后領(lǐng)導(dǎo)說要在相機(jī)上加一個(gè)橘色邊框,然后加個(gè)提示框,提示用戶“嘗試將身份證置于邊框”進(jìn)行拍照。類似下面這種邊框

3161EAC403787DDF06329B97A6F9D30E.png

然后我就咔咔咔一頓代碼,做成了下面這種,看著還可以

IMG_2651.PNG

然后給領(lǐng)導(dǎo)演示了一邊,領(lǐng)導(dǎo)又發(fā)話了,照片展示的時(shí)候只要中間這塊身份證就好了,其他的截掉,然后就開始坑了,中間有很多mmp不知當(dāng)講不當(dāng)講(是在裁剪的時(shí)候遇到坑)。

下面開始講代碼部分:

自定義相機(jī)部分 AVCaptureDevice 類、 AVCaptureDeviceInput 類、AVCaptureSession類可以查到相關(guān)用法。

最主要講裁剪部分

#pragma mark - 選擇照片 返回上級(jí)
- (void)selectImage{
    
    //self.image是拍照所得的照片
    UIImage *image1 = self.image;
    
    CGImageRef cgRef = image1.CGImage;
    
    //實(shí)際照片大小與屏幕大小之比
    CGFloat widthScale = image1.size.width / ScreenWidth;
    CGFloat heightScale = image1.size.height / ScreenHeight;
    
    //我們所拍照片其實(shí)是橫屏的
    //多減掉50是因?yàn)樽詈蟮男Ч麍D片的高度有偏差,不知道原因
    CGFloat orignWidth = 226-50;//226
    CGFloat orginHeight = 360;//360
    
    //我們要裁剪出實(shí)際邊框內(nèi)的圖片,但是實(shí)際的照片我們看見的屏幕上的圖片,size是不一樣,可以打印一下照片的size看看起碼好幾千的像素,要不然手機(jī)拍的照片怎么都是好幾兆的呢?
    //以下需要裁剪出的rect是相對(duì)于實(shí)際照片的rect,所以要進(jìn)行 比例算法
    //看下面那張圖,所以呢,我們計(jì)算x的時(shí)候要用屏幕的高度來計(jì)算,計(jì)算y的時(shí)候要用屏幕的寬來計(jì)算。有興趣的可以試著反過來計(jì)算測(cè)試一下,截出的圖是怎么樣的。
    CGFloat x = (ScreenHeight - orginHeight) * 0.5 * heightScale;
    CGFloat y = (ScreenWidth - orignWidth) * 0.5 * widthScale;
    CGFloat width = orginHeight * heightScale;
    CGFloat height = orignWidth * widthScale;
    
    CGRect r = CGRectMake(x, y, width, height);
    
    CGImageRef imageRef = CGImageCreateWithImageInRect(cgRef, r);
    
    UIImage *thumbScale = [UIImage imageWithCGImage:imageRef];
    //
    image1 = thumbScale;
    
    self.image = image1;
    
    //返回的時(shí)候把圖片傳回去
    self.imageblock(self.image);
    
    [self dismissViewControllerAnimated:YES completion:nil];
    
}
屏幕快照 2017-11-09 下午4.21.09.png

最后就是結(jié)果的呈現(xiàn),可以看一下

拍照的時(shí)候這么大

IMG_2653.JPG

截出的圖這么小

IMG_2652.JPG

我想之所以截出的圖還是帶有一點(diǎn)點(diǎn)的桌子的木頭色,是因?yàn)椋▁,y)都是按照橘色邊框的尖尖角開始算的,畢竟那確實(shí)是邊框的(x,y)的起始點(diǎn),假如說想要很精確的話,可是讓UI把邊框的橘色部分像素給小,或者自己在裁剪的時(shí)候把這部分的像素減掉。

有什么不對(duì)的地方可以留言哦。
項(xiàng)目地址 https://gitee.com/dumdum/PhotoDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評(píng)論 25 709
  • 她是雪的孩子 人們用愛心把她塑成 她開心地看雪花飛舞 快樂地迎接寒風(fēng) 嚴(yán)寒使她變的堅(jiān)強(qiáng) 寒風(fēng)吹開了她的笑容 溫柔的...
    宋煒閱讀 258評(píng)論 0 3
  • 1.創(chuàng)建APPID時(shí),勾選HealthKit 2.在Target-Capability勾選HealthKit 3....
    再剪開一夜風(fēng)雨閱讀 555評(píng)論 0 0
  • 這么好想去除黑頭方法的基本原則、這么大概也不是那么好呢、一定是不是要是冷卻系統(tǒng)工程學(xué)會(huì)常務(wù)理事,我的心都碎了心的人...
    帥哥了你閱讀 212評(píng)論 0 1
  • repo就是: 注意:比如像配置.repo文件中: baseurl這個(gè)位置是寫的根目錄,一般來說根目錄下面都有一個(gè)...
    廖馬兒閱讀 4,445評(píng)論 0 0

友情鏈接更多精彩內(nèi)容