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