ZPhotoBrowser (基于之前的那篇文章PhotoKit初用)

前言

作為一個iOS開發人員,我已經不知不覺的在帝都這個地方上干了塊兩年了。前一陣,由于公司的發展方向的問題,我被迫加入了找工作的大軍之中。這可把我擔心壞了,因為我之前的一個同事找了好久都沒有找到工作,之后他就選擇回老家發展了。做過iOS這行的都知道現在是什么行情了,我就不多說了。不過還好我找了一周左右吧,面試不少。但是現在招人的公司,真的不知道要招什么樣的開發人員,面試草草了事的偏多。還有就是自認為大牛的比較多,我記得我面了一家智能家居的科技公司。那個面試我的面試官,看了我做過的產品。就給我說了一句:“你就是個調接口和寫TableView的啊。”這話聽起來真的讓人難受,用一句很流行的話說,那就是“扎心了,老鐵”。我仔細一想,也確實。現在的App,基本都是這樣的啊。基本都是項目需求是什么做什么。所以我覺得 我不能在這么下去了。


GPUImage

上面說了,我打算自己做做新的功能。突然間,就對相機這個模塊感興趣了。畢竟現在是全民P圖,全民美顏的時代。我還記得我小的時候看電視有這么一句臺詞“美不美,看大腿”。在現在應該是“美不美,看美顏”。
我就上網找了一下,偶然間發現了一個名為GPUImage的。好像是可以做到我想要的效果的,它內置了很多的濾鏡效果,共125個濾鏡, 分為四類
Color adjustments: 31 filters, 顏色處理相關
Image processing: 40 filters, 圖像處理相關.
Blending modes: 29 filters, 混合模式相關.
Visual effects: 25 filters, 視覺效果相關.
這里我就不把濾鏡的效果一一的列舉出來了,有興趣的可以去看gpuimage的各種濾鏡簡介GPUImage濾鏡列表 后面這個是簡書的文章,推薦!!


GPUImage之相機

要實現相機的效果主要有如下幾個變量:
@property (nonatomic, strong) GPUImageStillCamera *camera;
可以理解為設備
@property (nonatomic, strong) GPUImageView *imageView;
用于顯示的View
其實主要的變量還有一個就是你的濾鏡。
首先,我不是學計算機出身的一個iOS菜雞,對于那些什么美顏算法什么的真的是搞不明白。我就上網找了一個,在我的demo中有,你也可以調用系統的濾鏡文件。

//AVCaptureDevicePositionBack為后攝像頭 front為前置攝像頭
//AVCaptureSessionPreset1920x1080為分辨率 另外還支持多種分辨率
//AVCaptureSessionPreset1280x720 等等等等
- (GPUImageStillCamera *)camera{
    if (!_camera) {
        _camera = [[GPUImageStillCamera alloc]initWithSessionPreset:AVCaptureSessionPreset1280x720 cameraPosition:AVCaptureDevicePositionBack];
        _camera.outputImageOrientation = UIInterfaceOrientationPortrait;
        //設置前置攝像頭鏡像問題
        _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];

到此為止,你就萬事俱備了,只差東風了。你一定會問,東風是什么?那么我就告訴你,東風就是[self.camera startCameraCapture];這個時候你的相機就可以捕獲視圖了。
那么接下來,咱么就要給自己自定義的相機增加一些相應的功能按鈕,例如拍照, 旋轉攝像頭之類的 都是標配
當我們按下拍照按鈕的時候調用

    [self.camera capturePhotoAsImageProcessedUpToFilter:self.filter withCompletionHandler:^(UIImage *processedImage, NSError *error) {
        if (error) {
            return ;
        }
        //成功了
        [self successCutPic:processedImage];
    }];

返回的那個processedImage就是你的照片了,然后你就去存儲這張照片就可以了。當然了,你此時就用該讓你的相機停止捕獲視圖[self.camera stopCameraCapture];然后再去存。
旋轉攝像頭,GPUImage自己就有相應的方法[self.camera rotateCamera]


忘記說了一個事情,在Github下載下來的GPUImage還需要你自己去編譯libGPUImage.a文件。如果不會的話可以去看看GPUImage集成上面寫的很詳細了。


傳送門

ZPhotoBrowser

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容