Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Web技術を最大限活用してRAW画像を現像する / Developing RAW Images...
Search
TOMIKAWA Sotaro
September 21, 2025
Programming
3.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Web技術を最大限活用してRAW画像を現像する / Developing RAW Images on the Web
https://fec-tokyo.connpass.com/event/352581/
TOMIKAWA Sotaro
September 21, 2025
More Decks by TOMIKAWA Sotaro
See All by TOMIKAWA Sotaro
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
3.2k
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
3
2.7k
Atomics APIを知る / Understanding Atomics API
ssssota
2
1.5k
なんでRustの環境構築してないのにRust製のツールが動くの? / Why Do Rust-Based Tools Run Without a Rust Environment?
ssssota
15
56k
漸進。
ssssota
0
3.8k
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
3.9k
useSyncExternalStoreを使いまくる
ssssota
6
7.1k
React CompilerとFine Grained Reactivityと宣言的UIのこれから / The next chapter of declarative UI
ssssota
8
6.4k
新しいAPI createRawSnippet触ってみた / What is the createRawSnippet?
ssssota
2
360
Other Decks in Programming
See All in Programming
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.8k
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
370
Atomic Design, Enforced: Scaling Mobile Design Systems (next.app devCon / droidCon Berlin 2026)
steliosf
PRO
0
160
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Findy - エンジニア向け会社紹介/Findy Company Deck
findyinc
6
400k
ジョジョの世界をXRで再現する
mofurune
0
150
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
520
【加筆修正版】Laravel のアプリケーションをどこにデプロイするか #phpcon_ehime
akase244
0
150
プロダクトコードからライブラリの境界を見つける
elmetal
PRO
0
110
APNsからLive Activityを開始する話
yumnumm
0
160
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
930
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
650
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
96
6.9k
Thoughts on Productivity
jonyablonski
76
5.4k
Building AI with AI
inesmontani
PRO
1
1.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Scaling GitHub
holman
464
140k
The Pragmatic Product Professional
lauravandoore
37
7.5k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
770
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
Evolving SEO for Evolving Search Engines
ryanjones
0
310
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
530
Everyday Curiosity
cassininazir
0
350
Transcript
Web技術を最⼤限活⽤して RAW画像を現像する sssssota / #fec_tokyo
⾃⼰紹介 ssssota (冨川宗太郎) sは4つ テックリード(写真・現像は素人) { x: "ssssotaro", gh: "ssssota",
cameras: ["S5IIX", "S9", "fp L"] }
RAW画像とは何か カメラをやっているとRAW画像という概念に出会う (最近ではiPhoneなどのスマホでもRAW画像を出力できる) 一般的な写真のフォーマットであるJPEGはRGB各8bit、 計24bitで色を表現する すると (28)3=約1680万色 になる
RAW画像とは何か カメラのセンサーは各色12bit〜16bitといった解像能を持つ 8bit→1680万色だったのが14bit→4兆色になる すると、ファイルサイズがでかくなる。(30MiB〜100MiB)
RAW画像とは何か そんなとても大きいRAW画像 カメラメーカー各社が独自規格で出力してくれる オープンな規格(TIFF, DNG)も存在するが 日本の大手メーカー各社は使わず...
RAW画像を現像する とにかくデカい、独自規格なバイナリ 一般的には デスクトップアプリケーション・モバイルアプリケーションで ネイティブな並列処理、GPU処理を活用しながら行う
Webエンジニアなので Webで完結させたい
resolve.photos
概観
課題の整理 1. カメラメーカー各社の独自フォーマット 2. デカいファイルに対する処理速度
LibRaw RAW画像を読めるOSS メーカー独自の規格の多くを自前でサポートするのは困難 ただしC++
C++のLibRawをブラウザで動かすためにWASMを使う WASMへのコンパイルにはEmscriptenを使う libraw.wasm
WebAssemblyの制約 現在も仕様の策定が進行しているが、JS - WASM間で 文字列や構造体などの非数な値をやりとりするのは難しい メモリ空間は共有できるので、 構造体をメモリに直接読み書きする手法を用いる
メモリから構造体を読むために C/C++の構造体は定義からメモリレイアウトが確定する struct Sample { uint8_t foo; uint16_t bar; }
typed-cstruct 構造体の定義をTypeScriptで書き下すと型付きで バイナリを読み書きできるようになるライブラリ 構造体がたくさんあると手書きが大変なので @typed-cstruct/generator でCのヘッダーファイルからTypeScriptも生成
WebAssemblyは速いが WebAssemblyはそれなりに速いが、 JavaScriptと同じスレッドで動くために メインスレッドでヘビーな利用をするとUIが硬直する
Web Worker WebAssemblyで動かすようなCPUヘビーな処理は 往々にしてWeb Workerに逃がす Web Workerに逃がすことでUIをブロッキングせずに 処理を進める Comlinkやbidcを用いてWeb Workerとの通信を
抽象化するのが一般的
レンダリングする ここまででビットマップ画像が得られる Canvas APIではRGB各色16bitのビットマップを扱えない WebGL 2.0を使うことになる
現像する 現状resolve.photosはノイズ除去や収差補正はサポートせず とある動画編集ソフトを参考にノードベースのLUT適用を実現
⾼速なLUT適⽤ 6000x4000ピクセルの色を取得、1つずつLUTに入れて... とするととても遅い 1つのことを繰り返しするのはGPUが得意 → WebGPU WebGL2でレンダリング時に
LUTをテクスチャとして読み込み、WebGLで画像に対し適用 ノードベースで複数のノード(=LUT)があることもあるので WebGLのフラグメントシェーダーは動的に生成する WebGLを⽤いたLUT適⽤
概観
改善余地 • そもそも機能数が全く足りてない ◦ 技術的におもしろい部分だけ作って満足している節がある ◦ PoCとしては十分... • WebAssembly Multithreading
◦ 検証不足 • RAW画像解析をそもそもGPGPUできる説 ◦ 現実的ではないが夢はある • 最近はAI現像っていうのが流行ってるらしい ◦ マルチモーダルなローカルLLMがWebにきたらアツいですね
おわり 参考 • https://github.com/ssssota/resolve.photos • https://github.com/ssssota/libraw.wasm • https://github.com/LibRaw/LibRaw • https://github.com/ssssota/typed-cstruct