RAW 檔案是被讀,不是被上傳,而且只讀了一點點。相機的 RAW 檔案裡本來就有一張相機在按下快門那一刻渲染好的原尺寸 JPEG。這個工具走幾條目錄項把它找出來,然後只要其中一段,在一個 60 MB 的檔案上通常不到一百 KB。你運作的時候,頁面會一直把這個數字擺在你檔案的大小旁邊。感測器資料根本一次都沒讀過。
如果公司的安全軟體警告說有上傳。它盯著瀏覽器裡選擇檔案的那一刻,而且無法知道頁面是否打算把它發出去——所以在選擇時就發出警告。這裡什麼都不會發出去:開啟瀏覽器的開發者工具,切到網路,然後選一個檔案。沒有任何請求帶著它,除了這個頁面自己的本地預覽之外,根本沒有任何請求。同樣的檢查,你們的 IT 同事半分鐘就能做完。
不會。每一幀的開啟、解碼、對齊、堆疊和寫出,全都由你自己的瀏覽器在你自己的硬體上完成。這個工具沒有任何聯網功能,從不取東西,也從不發東西,頁面的 Content-Security-Policy 裡寫著它能聯絡的每一個地址,沒有一個屬於本站。把頁面載入一次,斷網,它照樣能用。這件事在這裡比在多數工具上更要緊,單純是因為量:二十個 RAW 幀差不多一個 G,而為了讓別人算一次平均值就上傳一個 G 的照片,正是這個工具存在的意義所要避開的事。
它能讀哪些 RAW 格式?怎麼讀的?
CR2、CR3、NEF、NRW、ARW、SR2、SRF、DNG、ORF、RAF、RW2、PEF、SRW、3FR、IIQ、DCR、KDC、MRW、MEF、RWL 等等,也就是相機會寫的絕大多數。從裡面讀出來的是相機自己在按下快門那一刻渲染好的原尺寸 JPEG 預覽圖,也就是相機背後螢幕上顯示的那張,以及你的作業系統拿來當縮圖畫的那張。它是靠走檔案的目錄結構找到的,代價是幾次每次幾十 KB 的讀取,然後取其中一段。這不是對感測器資料做去馬賽克。結果帶的是相機自己的白平衡和照片風格,每通道八位,而不是 RAW 轉換器會給你的那十二位或者十四位線性感測器資料。
那為什麼不好好解碼感測器資料?
因為那意味著要把 LibRaw 或者 dcraw 隨包帶上:為了一個格式家族多背一個幾十兆的引擎,而其中大半還是各家廠商自己的壓縮方案。這筆帳在本站原始碼的 docs/what-can-be-built-here.md 裡算過,相機 RAW 早在這個工具出現之前就在排除名單上了。變的不是那個問題的答案,而是我們發現堆疊根本不需要它:預覽圖是全解析度的,本來也就是相機會給你的那張 JPEG,而讀它比去馬賽克快大約一百倍。你要是要感測器資料,先在 RAW 轉換器裡衝一遍,再把它給出的 TIFF 或者 JPEG 拿來堆疊,這個工具也收那些。