1 unstable release
0.6.0 | Jan 6, 2024 |
---|
#974 in Images
1MB
26K
SLoC
Rawler
Digital camera raw format library
What is Rawler?
Rawler parses raw file formats and provides access to the pixels and all metadata.
Why is it named rawler?
It's a (c)rawler, just for raw file structures.
Why another raw library?
- There are libraries dealing with metadata (exiv2) and for pixels (rawspeed, libraw), but not for both. Each library ships their own file structure parsers.
- rawloader, which is basically the fundament of this library, is a pretty good library, but lacks of support for metadata.
- For fun.
lib.rs
:
Library to extract the raw data and some metadata from digital camera images. Given an image in a supported format and camera you will be able to get everything needed to process the image
Example
use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::io::BufWriter;
fn main() {
let args: Vec<_> = env::args().collect();
if args.len() != 2 {
println!("Usage: {} <file>", args[0]);
std::process::exit(2);
}
let file = &args[1];
let image = rawler::decode_file(file).unwrap();
// Write out the image as a grayscale PPM
let mut f = BufWriter::new(File::create(format!("{}.ppm",file)).unwrap());
let preamble = format!("P6 {} {} {}\n", image.width, image.height, 65535).into_bytes();
f.write_all(&preamble).unwrap();
if let rawler::RawImageData::Integer(data) = image.data {
for pix in data {
// Do an extremely crude "demosaic" by setting R=G=B
let pixhigh = (pix>>8) as u8;
let pixlow = (pix&0x0f) as u8;
f.write_all(&[pixhigh, pixlow, pixhigh, pixlow, pixhigh, pixlow]).unwrap()
}
} else {
eprintln!("Don't know how to process non-integer raw files");
}
}
Dependencies
~16–24MB
~313K SLoC