The extra R is becuase it's extra cute 😺
This module can be used as a CLI, with all of the exact same functionality as DCRAW itself. You can either install it globally:
npm install --global dcrawr
# print help
dcrawr
# convert an image
dcrawr -w -W IMG_1234.CR2
Or you can use it directly though npx
:
# convert an image
npx dcrawr -w -W IMG_1234.CR2
This module only exposes the path to the correct DCRAW binary, which you can use directly through child_process
:
const dcraw = require('dcrawr');
const { promisify } = require('util');
const { execFile } = require('child_process');
const fs = require('fs');
// -c will write the data to stdout
promisify(execFile)(dcraw, ['-c', 'my-image.dng'], {
// hide the extra window on Windows
windowsHide: true,
// we want the raw data, not a string
encoding: 'buffer',
// 8-bit PPMs are roughly 3x bigger than the original raw file
// so you should set this number fairly high
maxBuffer: 1024 * 1024 * 100
})
.then(result => {
// don't use the sync method... you get the idea though
fs.writeFileSync('./my-image.ppm', result.stdout);
}).catch(err => {
console.error(err);
});