aboutsummaryrefslogtreecommitdiff
path: root/vendor/jpeg-decoder/examples/decode.rs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2024-07-19 15:37:58 +0300
committerValentin Popov <valentin@popov.link>2024-07-19 15:37:58 +0300
commita990de90fe41456a23e58bd087d2f107d321f3a1 (patch)
tree15afc392522a9e85dc3332235e311b7d39352ea9 /vendor/jpeg-decoder/examples/decode.rs
parent3d48cd3f81164bbfc1a755dc1d4a9a02f98c8ddd (diff)
downloadfparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.tar.xz
fparkan-a990de90fe41456a23e58bd087d2f107d321f3a1.zip
Deleted vendor folder
Diffstat (limited to 'vendor/jpeg-decoder/examples/decode.rs')
-rw-r--r--vendor/jpeg-decoder/examples/decode.rs83
1 files changed, 0 insertions, 83 deletions
diff --git a/vendor/jpeg-decoder/examples/decode.rs b/vendor/jpeg-decoder/examples/decode.rs
deleted file mode 100644
index 13934fe..0000000
--- a/vendor/jpeg-decoder/examples/decode.rs
+++ /dev/null
@@ -1,83 +0,0 @@
-extern crate jpeg_decoder as jpeg;
-extern crate png;
-
-use std::env;
-use std::fs::File;
-use std::io::{self, BufReader, Write};
-use std::process;
-
-fn usage() -> ! {
- write!(io::stderr(), "usage: decode image.jpg image.png").unwrap();
- process::exit(1)
-}
-
-fn main() {
- let mut args = env::args().skip(1);
- let input_path = args.next().unwrap_or_else(|| usage());
- let output_path = args.next().unwrap_or_else(|| usage());
-
- let input_file = File::open(input_path).expect("The specified input file could not be opened");
- let mut decoder = jpeg::Decoder::new(BufReader::new(input_file));
- let mut data = decoder.decode().expect("Decoding failed. If other software can successfully decode the specified JPEG image, then it's likely that there is a bug in jpeg-decoder");
- let info = decoder.info().unwrap();
-
- eprintln!("{:?}", info);
- eprintln!("Exif: {}", decoder.exif_data().is_some());
- eprintln!("ICC: {}", decoder.icc_profile().is_some());
-
- let output_file = File::create(output_path).unwrap();
- let mut encoder = png::Encoder::new(output_file, info.width as u32, info.height as u32);
-
- match info.pixel_format {
- jpeg::PixelFormat::L16 => {
- encoder.set_depth(png::BitDepth::Sixteen);
- encoder.set_color(png::ColorType::Grayscale);
- },
- jpeg::PixelFormat::RGB24 => {
- encoder.set_depth(png::BitDepth::Eight);
- encoder.set_color(png::ColorType::RGB);
- },
- jpeg::PixelFormat::CMYK32 => {
- data = cmyk_to_rgb(&mut data);
- encoder.set_depth(png::BitDepth::Eight);
- encoder.set_color(png::ColorType::RGB)
- },
- jpeg::PixelFormat::L8 => {
- encoder.set_depth(png::BitDepth::Eight);
- encoder.set_color(png::ColorType::Grayscale);
- },
- }
-
- encoder.write_header()
- .expect("writing png header failed")
- .write_image_data(&data)
- .expect("png encoding failed");
-}
-
-fn cmyk_to_rgb(input: &[u8]) -> Vec<u8> {
- let size = input.len() - input.len() / 4;
- let mut output = Vec::with_capacity(size);
-
- for pixel in input.chunks(4) {
- let c = pixel[0] as f32 / 255.0;
- let m = pixel[1] as f32 / 255.0;
- let y = pixel[2] as f32 / 255.0;
- let k = pixel[3] as f32 / 255.0;
-
- // CMYK -> CMY
- let c = c * (1.0 - k) + k;
- let m = m * (1.0 - k) + k;
- let y = y * (1.0 - k) + k;
-
- // CMY -> RGB
- let r = (1.0 - c) * 255.0;
- let g = (1.0 - m) * 255.0;
- let b = (1.0 - y) * 255.0;
-
- output.push(r as u8);
- output.push(g as u8);
- output.push(b as u8);
- }
-
- output
-}