| Crates.io | pixgrid |
| lib.rs | pixgrid |
| version | 1.5.0 |
| created_at | 2025-11-15 12:50:10.844534+00 |
| updated_at | 2025-11-22 13:01:23.237062+00 |
| description | The PixGrid library is designed to convert a simple, human-readable text file format, defining a pixel grid, into an image. |
| homepage | |
| repository | https://github.com/Jxtopher/enum-toggles-rs |
| max_upload_size | |
| id | 1934315 |
| size | 295,894 |
The PixGrid library is a utility written in Rust designed to convert simple, human-readable text definitions of a pixel grid into high-quality image formats (PNG or SVG).
This format is ideal for defining pixel art, simple maps, or custom icons in a clear, text-based manner.
The PixGrid file format (typically using the .pg extension) is divided into three main sections. The parser ignores lines starting with # (comments).
This section defines the structural properties of the output image.
| Format | Description |
|---|---|
| cell_size | The size (width and height) in pixels of each individual grid cell in the final image. Default is 10. |
| grid_color | Defines the color of the 1-pixel wide grid lines drawn between cells. If this parameter is omitted, no grid lines are drawn. |
| Format | Description |
|---|---|
[Code] = R, G, B |
Defines the color map entry. Code must be a single u8 integer. R, G, B must be comma-separated u8 (0-255) values. |
This section contains the actual pixel layout, separated from the configuration by ---.
| Format | Description |
|---|---|
--- |
Mandatory separator marking the start of the grid data. |
[codes] |
Each line represents a row in the grid. Color codes must be separated by whitespace and must refer to a defined entry in the color map. |
This example file defines a simple 10x10 pattern with cells of 40x40 pixels, using black lines to delineate the grid.
# --- RENDERING PARAMETERS ---
cell_size = 40
grid_color = 0, 0, 0 # New: Black grid lines (RGB)
# --- COLOR DEFINITIONS (Code = R, G, B) ---
0 = 255, 255, 255 # White (background)
1 = 0, 0, 0 # Black (border/fill)
2 = 255, 165, 0 # Orange
3 = 0, 255, 0 # Green
# --- GRID START (space-separated) ---
---
0 0 0 0 0 0 0 0 0 0
0 1 1 1 1 1 1 1 1 0
0 1 2 2 2 2 2 2 1 0
0 1 2 3 3 3 3 2 1 0
0 1 2 3 0 0 3 2 1 0
0 1 2 3 0 0 3 2 1 0
0 1 2 3 3 3 3 2 1 0
0 1 2 2 2 2 2 2 1 0
0 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0
This small Rust program is a command-line tool that uses the pixgrid library to visualize data.
It reads a plain text definition file (.pg) that contains color codes and grid layout information.
It uses PixGrid::parse to convert this text into a structured grid object.
Based on the output file's extension (.png or .svg), it calls the corresponding method (export_png or export_svg) to draw the pixel art image and save it to the disk.
use pixgrid::PixGrid;
use std::error::Error;
use std::fs;
use std::path::Path;
fn main() -> Result<(), Box<dyn Error>> {
let input_file_path = "instances/nested_squares.pg";
// Modify here to choose the output extension and format.
let output_file_name = "nested_squares.svg";
let output_path = Path::new(output_file_name);
// 1. Reading the file
println!("Reading file: {}", input_file_path);
let input_data = fs::read_to_string(input_file_path).map_err(|e| {
format!(
"Error reading file {}: {}",
input_file_path, e
)
})?;
// 2. Parsing colors and the grid (PixGrid contains everything)
// Using the static method PixGrid::parse
let pg = PixGrid::parse(&input_data)?;
println!(
"Defined colors: {:?}",
pg.color_map.keys().collect::<Vec<_>>()
);
println!(
"Grid read: {} rows x {} columns",
pg.grid_data.len(),
pg.grid_data.first().map_or(0, |r| r.len())
);
// 3. Image generation (selection logic)
let extension = output_path
.extension()
.and_then(std::ffi::OsStr::to_str)
.unwrap_or_default();
match extension {
"png" => {
println!("Generating in PNG format...");
// Using the instance method
pg.export_png(output_path)?;
}
"svg" => {
println!("Generating in SVG format...");
// Using the instance method
pg.export_svg(output_path)?;
}
_ => {
return Err(format!(
"Unsupported file extension: '{}'. Use '.png' or '.svg'.",
extension
)
.into());
}
}
println!("Generation finished successfully!");
Ok(())
}