-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.html
97 lines (85 loc) · 4.21 KB
/
example.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>LibRaw Demo</title>
</head>
<body>
<h1>LibRaw WASM Demo</h1>
<input type="file" id="file" accept=".cr2,.nef,.arw,.dng,.raw,.rw2" />
<p>Select a RAW file above. Then open the browser console to see logs.</p>
<pre id="output"></pre>
<script type="module">
import LibRaw from './index.js';
const fileInput = document.getElementById('file');
const output = document.getElementById('output');
// Listen for file selection
fileInput.addEventListener('change', async (event) => {
const file = event.target.files[0];
if (!file) return;
try {
// Read the RAW file into an ArrayBuffer
const arrayBuffer = await file.arrayBuffer();
console.log(arrayBuffer);
// Instantiate LibRaw
const raw = new LibRaw();
// Open (decode) the RAW file
await raw.open(new Uint8Array(arrayBuffer), {
bright: 1.0, // -b <float> : brightness
threshold: 0.0, // -n <float> : wavelet denoise threshold
autoBrightThr: 0.01, // portion of clipped pixels for auto-brightening
adjustMaximumThr: 0.75, // auto-adjust max if channel overflow above threshold
expShift: 1.0, // exposure shift in linear scale (requires expCorrec=1)
expPreser: 0.0, // preserve highlights when expShift>1 (0..1)
halfSize: false, // -h : output at 1/2 size
fourColorRgb: false, // -f : separate interpolation for two green channels
highlight: 0, // -H : highlight mode (0..9)
useAutoWb: false, // -a : auto white balance
useCameraWb: false, // -w : camera's recorded WB
useCameraMatrix: 1, // +M/-M : color profile usage (0=off,1=on if WB,3=always)
outputColor: 1, // -o : output colorspace (0..8) (0=raw,1=sRGB,2=Adobe, etc.)
outputBps: 8, // -4 : 8 or 16 bits per sample
outputTiff: false, // -T : output TIFF if true, else PPM
outputFlags: 0, // bitfield for custom output flags
userFlip: -1, // -t : flip/rotate (0..7, default=-1 means use RAW value)
userQual: 3, // -q : interpolation quality (0..12)
userBlack: -1, // -k : user black level
userCblack: [-1, -1, -1, -1], // per-channel black offsets
userSat: 0, // -S : saturation level
medPasses: 0, // -m : median filter passes
noAutoBright: false, // -W : don't apply auto brightness
useFujiRotate: -1, // -j : -1=use, 0=off, 1=on, for Fuji sensor rotation
greenMatching: false, // fix green channel imbalance (not a dcraw key)
dcbIterations: -1, // additional DCB passes (-1=off)
dcbEnhanceFl: false, // enhance color fidelity in DCB
fbddNoiserd: 0, // 0=off,1=light,2=full FBDD denoise
expCorrec: false, // enable exposure correction (then expShift, expPreser apply)
noAutoScale: false, // skip scale_colors (affects WB)
noInterpolation: false, // skip demosaic entirely (outputs raw mosaic)
greybox: null, // -A x y w h : rectangle (x,y,width,height) for WB calc
cropbox: null, // Cropping rectangle (left, top, w, h) applied before rotation
aber: null, // -C (red multiplier = aber[0], blue multiplier = aber[2])
gamm: null, // -g power toe_slope (1/power -> gamm[0], gamm[1] -> slope)
userMul: null, // -r mul0 mul1 mul2 mul3 : user WB multipliers (r, g, b, g2)
outputProfile: null, // -o <filename> : output ICC profile (if compiled w/ LCMS)
cameraProfile: null, // -p <filename> or 'embed' : camera ICC profile
badPixels: null, // -P <file> : file with bad pixels map
darkFrame: null, // -K <file> : file with dark frame (16-bit PGM)
});
// Fetch metadata
const meta = await raw.metadata(true);
console.log('Metadata:', meta);
output.innerText = JSON.stringify(meta, null, 4);
// Fetch the decoded image data (RGB pixels)
const imageData = await raw.imageData();
console.log('Image data:', imageData);
// If you want to interpret the data as a PPM (for example),
// you could do something like convert to a text-based PPM or
// place it in a <canvas>. For now, we just log it.
} catch (err) {
console.error('Error processing RAW:', err);
}
});
</script>
</body>
</html>