flif

FLIF decoder written in pure Rust

4 releases (breaking)

0.4.1 Feb 24, 2019
0.4.0 Feb 22, 2019
0.3.0 Jul 29, 2018
0.2.0 Jun 8, 2018
0.0.0 Aug 26, 2016

MIT/Apache

635KB
2.5K SLoC

flif.rs

logo

Build Status version license

flif.rs is a Rust implementation of the flif16 image format. This project was inspired by the work on flif-rs.

Current Status

Currently this project in alpha stage. As of right now pixel data can be decoded but only for a limited subset of valid flif images. The most significant limitations are:

  • Animations are not supported.
  • Interlaced images are not supported.
  • Certain transformations are not supported.

As this project progresses more and more missing features will end up being supported.

Development

Prerequisites

  • rustc (either via rustup or your distributions package manager)
  • cargo (via the same method as above)

Building

  • git clone https://github.com/dgriffen/flif.rs.git
  • cd flif.rs
  • cargo build

Usage

  1. add this crate to your crates Cargo.toml like so:
[package]
name = "some_package"
version = "0.0.1"
authors = ["John Doe <you@example.com>"]

[dependencies]
flif = "0.2"
  1. in the root of your project reference the crate:
extern crate flif;
  1. the crate can now be used to decode flif headers :D
extern crate flif;

use std::fs::File;
use std::io::BufReader;
use flif::Flif;

fn main() {
    let file = std::fs::File::open("/path/to/image.flif").unwrap();
    // use `BufReader` to improve performance
    let reader = BufReader::new(file);
    let image = Flif::decode(reader).unwrap();
    println!("image info: {:?}", image.info());
    let raw_pixels = image.get_raw_pixels();
}

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Trademarks

The flif.rs logo is a combination of the official flif logo and Rust logo.


lib.rs:

Example

extern crate flif;

use std::fs::File;
use std::io::BufReader;
use flif::Flif;

fn main() {
    let file = std::fs::File::open("../resources/flif_logo.flif").unwrap();
    // use `BufReader` to improve performance
    let reader = BufReader::new(file);
    let image = Flif::decode(reader).unwrap();
    println!("image info: {:?}", image.info());
    let raw_pixels = image.raw();
}

Dependencies