aseprite/lib.rs
1//! Read and write Aseprite `.ase`/`.aseprite` files.
2//!
3//! This crate provides full support for the [Aseprite binary file format](https://github.com/aseprite/aseprite/blob/main/docs/ase-file-specs.md),
4//! including reading, writing, and byte-perfect round-trip preservation. All color
5//! modes (RGBA, Grayscale, Indexed), layer types (normal, group, tilemap), animation
6//! tags, slices, user data with typed properties, and tilesets are supported.
7//!
8//! # Reading a file
9//!
10//! ```no_run
11//! use aseprite::AsepriteFile;
12//!
13//! let data = std::fs::read("sprite.aseprite").unwrap();
14//! let file = AsepriteFile::from_reader(&data[..]).unwrap();
15//!
16//! println!("{}x{}, {} frames", file.width(), file.height(), file.frames().len());
17//! for layer in file.layers() {
18//! println!(" layer: {}", layer.name);
19//! }
20//! ```
21//!
22//! # Creating a file from scratch
23//!
24//! ```
25//! use aseprite::*;
26//!
27//! let mut file = AsepriteFile::new(16, 16, ColorMode::Rgba);
28//! let layer = file.add_layer("Background");
29//! let frame = file.add_frame(100);
30//! let pixels = Pixels::new(vec![0u8; 16 * 16 * 4], 16, 16, ColorMode::Rgba).unwrap();
31//! file.set_cel(layer, frame, pixels, 0, 0).unwrap();
32//!
33//! let mut output = Vec::new();
34//! file.write_to(&mut output).unwrap();
35//! ```
36//!
37//! # Feature flags
38//!
39//! | Feature | Description |
40//! |---------|-------------|
41//! | `image` | Enables conversions between [`Pixels`] and `image::RgbaImage` |
42//! | `tiny-skia` | Enables conversions between [`Pixels`] and `tiny_skia::Pixmap` (handles premultiplied alpha) |
43
44mod error;
45#[cfg(feature = "image")]
46mod image_conv;
47#[cfg(feature = "tiny-skia")]
48mod tiny_skia_conv;
49mod reader;
50mod types;
51mod writer;
52
53pub use error::AsepriteError;
54pub use types::*;
55
56impl AsepriteFile {
57 /// Parses an Aseprite file from any reader.
58 pub fn from_reader<R: std::io::Read>(r: R) -> Result<Self, AsepriteError> {
59 reader::from_reader(r)
60 }
61
62 /// Writes the file in Aseprite binary format to any writer.
63 pub fn write_to<W: std::io::Write>(&self, w: W) -> Result<(), AsepriteError> {
64 writer::write_to(self, w)
65 }
66}