pixa_downscaler
v0.1.1
Published
Here's a suggested `README.md` tailored to your `kmeans_downscale_lab` WebAssembly project:
Readme
Here's a suggested README.md tailored to your kmeans_downscale_lab WebAssembly project:
# K-Means++ LAB Downscaler (WebAssembly)
A high-quality, perceptually-aware image downscaler using **k-means++ clustering** and **LAB color space**. This project is designed for WebAssembly, making it ideal for integration into browsers or web-based creative tools.
---
## 🚀 Features
- 💡 Uses **LAB color distance** for perceptual accuracy.
- 🎯 Implements **k-means++ initialization** for better convergence.
- ⚡ WebAssembly compatible (via `wasm-bindgen`).
- 🖼️ Outputs a downscaled image where each pixel represents a color-clustered region from the original.
- 🛠️ Written in Rust for performance and reliability.
---
## 🔧 Usage
### 📦 Build with `wasm-pack`
```sh
wasm-pack build --release --target web🧪 In JavaScript (after build):
import init, { downscale_kmeans_lab } from "pixa_downscaler";
await init();
const result = downscale_kmeans_lab(
inputBuffer, // Uint8Array (flattened RGBA)
originalWidth,
originalHeight,
newWidth,
newHeight
);
// `result` is a Uint8Array of RGBA values, newWidth x newHeight pixels📦 Inputs & Parameters
| Parameter | Description |
|------------------|---------------------------------------|
| input | RGBA byte buffer (Uint8Array or &[u8]) |
| in_width | Original image width in pixels |
| in_height | Original image height in pixels |
| out_width | Output width (tile count) |
| out_height | Output height (tile count) |
🧠 How It Works
- The input image is divided into tiles.
- Each tile undergoes k-means++ clustering in LAB space.
- The most dominant color cluster in each tile is used for the downscaled pixel.
- Result: a stylized downscaling that retains perceptual color essence.
🧰 Development Dependencies
[dependencies]
wasm-bindgen = "0.2"
palette = "0.7"
rand = "0.8"
getrandom = { version = "0.2", features = ["js"] }📜 License
MIT
✨ Credits
Developed with elegance and strategy for perceptual pixel artistry.
---
Let me know if you want to include:
- A demo link
- Visual example screenshots
- Integration with a pixel editor or creative tool UI