Android 手機(jī)如何拍攝RAW圖

佳能5D Mark III
專業(yè)玩攝影的朋友可能更傾向于使用相機(jī)的RAW格式,然后自己做后期處理,而不是直接拍攝JPEG格式的圖片。
什么是RAW格式圖片
無論是專業(yè)的數(shù)碼相機(jī)還是手機(jī)的影像系統(tǒng),Camera的處理流程都是類似的(關(guān)于手機(jī)的影像系統(tǒng)可參考之前的文章數(shù)字成像系統(tǒng)概述):

可以看到RAW格式的圖像是由相機(jī)感光元件接受的原始圖像數(shù)據(jù)組成,同時(shí)包含文件創(chuàng)建時(shí)的相機(jī)設(shè)置和圖像處理參數(shù);

而JPEG格式的圖像是經(jīng)過圖像處理(如白平衡,銳化,色調(diào)和對比度等)后的數(shù)據(jù);

為什么專業(yè)攝像愛好者偏愛于RAW格式的圖片?
除了RAW格式包含的未經(jīng)處理的原始數(shù)據(jù)讓后期能有更大的操作空間(例如RAW格式文件比JPEG格式在高光和陰影區(qū)域能夠保留更多的細(xì)節(jié),可以在后期將過爆和欠曝的照片拉回正常的曝光范圍)外,通常圖像軟件對RAW格式的任何后期調(diào)整都是“非破壞性的”,也就是說不會(huì)改變原始文件而是創(chuàng)建了一個(gè)新的JPEG或者TIFF格式的圖片副本。這樣的優(yōu)勢可以讓后期制作無限次進(jìn)行,直到滿意為止。
Android手機(jī)拍攝RAW圖
我們使用Android Camera2的API來拍攝RAW圖,關(guān)于Camera2的基礎(chǔ)可以參考Android Camera2詳解
1. 查詢是否支持RAW圖輸出
首先需要查詢Camera是否支持直接輸出RAW格式的圖片,如果沒有找到任何一顆攝像頭,就需要換一臺(tái)測試設(shè)備了(現(xiàn)在國內(nèi)的頭部手機(jī)廠商的中高端機(jī)型基本都是支持的)
// We only use a camera that supports RAW.if (!contains(characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES),CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_RAW)) {continue;}
2. 配置RAW圖的輸出尺寸
通過ImageFormat.RAW_SENSOR格式從StreamConfigurationMap中查詢支持的size列表并選擇合適的size
Size largestRaw = Collections.max(Arrays.asList(map.getOutputSizes(ImageFormat.RAW_SENSOR)),new CompareSizesByArea());
3.?配置輸出Raw的Surafce
mRawImageReader = ImageReader.newInstance(largestRaw.getWidth(),largestRaw.getHeight(), ImageFormat.RAW_SENSOR, /*maxImages*/ 5);mRawImageReader.setOnImageAvailableListener(mOnRawImageAvailableListener, mBackgroundHandler);
4.?拍照并保存
在拍攝JPEG圖片的時(shí)候,我們只需要在拿到JPEG數(shù)據(jù)然后進(jìn)行保存即可。但是在拍攝RAW圖的場景下,拿到原始數(shù)據(jù)后,還需要保存本次拍照所設(shè)置的參數(shù)配置信息,并且打包到一個(gè)文件中去。
不同專業(yè)數(shù)碼相機(jī)廠商的攝像機(jī)設(shè)置RAW格式后所拍攝的圖像文件的后綴名并不一定就是xx.RAW。
各家相機(jī)廠商會(huì)采用不同的編碼方式來記錄RAW數(shù)據(jù),所以后綴名也不會(huì)相同,如下圖片都是RAW格式的圖片,可以看到格式種類繁多:

過多的RAW格式導(dǎo)致圖像處理軟件兼容性工作極具挑戰(zhàn)性,對軟件開發(fā)者和攝影師都不友好,為了解決這些沖突,Adobe公司在2004年推出了統(tǒng)一的RAW文件格式DNG(Digital Negative)。DNG的推出受到了不少軟件制造商的支持,比如Extensis,Canto,iView等,不少著名的相機(jī)制造商,如Leica,三星等也都推出了直接支持DNG的相機(jī)。
不過由于該DNG的標(biāo)準(zhǔn)還由Adobe掌控,而不是一個(gè)中立的行業(yè)標(biāo)準(zhǔn),導(dǎo)致它的支持覆蓋率并不高。
奧林巴斯單反相機(jī)部的產(chǎn)品經(jīng)理John Knaur說:“目前,我們還沒有看到這種格式成為一種跨平臺(tái)的事實(shí)標(biāo)準(zhǔn),它還只是Adobe 控制的一種圖片格式” (來自參考資料2)
當(dāng)然,Android SDK中已經(jīng)提供了能將原始Camera數(shù)據(jù)和拍照的配置參數(shù)直接封裝為DNG文件的工具類DngCreator,我們直接用它來保存RAW圖即可
// mCharacteristics:該攝像頭的靜態(tài)配置信息// mCaptureResult:本次拍照的配置信息// mImage:封裝的原始圖像數(shù)據(jù)DngCreator dngCreator = new DngCreator(mCharacteristics, mCaptureResult);FileOutputStream output = null;try {output = new FileOutputStream(mFile);??????dngCreator.writeImage(output,?mImage);} catch (IOException e) {e.printStackTrace();} finally {mImage.close();closeOutput(output);}
使用RedMi K30拍攝RAW圖,在手機(jī)相冊中查看,可以看到具有RAW的標(biāo)識:

Demo圖
將DNG圖片導(dǎo)出到電腦,使用Photoshop Camera Raw打開,然后自己后期處理即可

注:
1. 文章演示代碼均來自Google官方例子,可github進(jìn)行搜索或加我好友獲取;
2. 文章部分圖片來自于網(wǎng)絡(luò),侵權(quán)請聯(lián)系進(jìn)行刪除~;
參考
1.【從零開始玩單反 相機(jī)參數(shù)之RAW格式詳解】
????http://dcdv.zol.com.cn/259/2596442.html
2.【DNG百度詞條】
????https://baike.baidu.com/item/.DNG格式/1797443?fr=aladdin
3.【到底什么是RAW格式文件】
????https://fotomen.cn/2018/06/28/what-raw/

技術(shù)交流,歡迎加我微信:ezglumes ,拉你入技術(shù)交流群。
推薦閱讀:
推薦幾個(gè)堪稱教科書級別的 Android 音視頻入門項(xiàng)目
覺得不錯(cuò),點(diǎn)個(gè)在看唄~

