前言
作為一個iOS開發(fā)人員,我已經(jīng)不知不覺的在帝都這個地方上干了塊兩年了豹储。前一陣,由于公司的發(fā)展方向的問題淘这,我被迫加入了找工作的大軍之中剥扣。這可把我擔(dān)心壞了,因為我之前的一個同事找了好久都沒有找到工作铝穷,之后他就選擇回老家發(fā)展了钠怯。做過iOS這行的都知道現(xiàn)在是什么行情了,我就不多說了曙聂。不過還好我找了一周左右吧晦炊,面試不少。但是現(xiàn)在招人的公司宁脊,真的不知道要招什么樣的開發(fā)人員断国,面試草草了事的偏多。還有就是自認(rèn)為大牛的比較多朦佩,我記得我面了一家智能家居的科技公司并思。那個面試我的面試官庐氮,看了我做過的產(chǎn)品语稠。就給我說了一句:“你就是個調(diào)接口和寫TableView的啊∨常”這話聽起來真的讓人難受仙畦,用一句很流行的話說,那就是“扎心了音婶,老鐵”慨畸。我仔細一想,也確實∫率剑現(xiàn)在的App寸士,基本都是這樣的啊檐什。基本都是項目需求是什么做什么弱卡。所以我覺得 我不能在這么下去了乃正。
GPUImage
上面說了,我打算自己做做新的功能婶博。突然間瓮具,就對相機這個模塊感興趣了。畢竟現(xiàn)在是全民P圖凡人,全民美顏的時代名党。我還記得我小的時候看電視有這么一句臺詞“美不美,看大腿”挠轴。在現(xiàn)在應(yīng)該是“美不美传睹,看美顏”。
我就上網(wǎng)找了一下忠荞,偶然間發(fā)現(xiàn)了一個名為GPUImage
的蒋歌。好像是可以做到我想要的效果的,它內(nèi)置了很多的濾鏡效果委煤,共125個濾鏡, 分為四類
Color adjustments: 31 filters, 顏色處理相關(guān)
Image processing: 40 filters, 圖像處理相關(guān).
Blending modes: 29 filters, 混合模式相關(guān).
Visual effects: 25 filters, 視覺效果相關(guān).
這里我就不把濾鏡的效果一一的列舉出來了堂油,有興趣的可以去看gpuimage的各種濾鏡簡介或GPUImage濾鏡列表 后面這個是簡書的文章,推薦1探省府框!
GPUImage之相機
要實現(xiàn)相機的效果主要有如下幾個變量:
@property (nonatomic, strong) GPUImageStillCamera *camera;
可以理解為設(shè)備
@property (nonatomic, strong) GPUImageView *imageView;
用于顯示的View
其實主要的變量還有一個就是你的濾鏡。
首先讥邻,我不是學(xué)計算機出身的一個iOS菜雞迫靖,對于那些什么美顏算法什么的真的是搞不明白。我就上網(wǎng)找了一個兴使,在我的demo中有系宜,你也可以調(diào)用系統(tǒng)的濾鏡文件。
//AVCaptureDevicePositionBack為后攝像頭 front為前置攝像頭
//AVCaptureSessionPreset1920x1080為分辨率 另外還支持多種分辨率
//AVCaptureSessionPreset1280x720 等等等等
- (GPUImageStillCamera *)camera{
if (!_camera) {
_camera = [[GPUImageStillCamera alloc]initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionBack];
_camera.outputImageOrientation = UIInterfaceOrientationPortrait;
//設(shè)置前置攝像頭鏡像問題
_camera.horizontallyMirrorFrontFacingCamera = YES;
}
return _camera;
}
//濾鏡
- (GPUImageBeautifyFilter *)filter{
if (!_filter) {
_filter = [[GPUImageBeautifyFilter alloc]init];
}
return _filter;
}
- (GPUImageView *)imageView{
if (!_imageView) {
_imageView = [[GPUImageView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
//顯示模式
_imageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
}
return _imageView;
}
這只是初始化发魄,然后這3個變量之間還要添加一下
[self.camera addTarget:self.filter];
[self.filter addTarget:self.imageView];
[self.view addSubview:self.imageView];
到此為止盹牧,你就萬事俱備了,只差東風(fēng)了励幼。你一定會問汰寓,東風(fēng)是什么?那么我就告訴你苹粟,東風(fēng)就是[self.camera startCameraCapture];
這個時候你的相機就可以捕獲視圖了有滑。
那么接下來,咱么就要給自己自定義的相機增加一些相應(yīng)的功能按鈕嵌削,例如拍照毛好, 旋轉(zhuǎn)攝像頭之類的 都是標(biāo)配
當(dāng)我們按下拍照按鈕的時候調(diào)用
[self.camera capturePhotoAsImageProcessedUpToFilter:self.filter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
if (error) {
return ;
}
//成功了
[self successCutPic:processedImage];
}];
返回的那個processedImage
就是你的照片了望艺,然后你就去存儲這張照片就可以了。當(dāng)然了肌访,你此時就用該讓你的相機停止捕獲視圖[self.camera stopCameraCapture];
然后再去存荣茫。
旋轉(zhuǎn)攝像頭,GPUImage自己就有相應(yīng)的方法[self.camera rotateCamera]
忘記說了一個事情场靴,在Github下載下來的GPUImage還需要你自己去編譯libGPUImage.a
文件啡莉。如果不會的話可以去看看GPUImage集成上面寫的很詳細了。