# llimphi-image *Read this in English: [README.md](README.md).* Decode pipeline para `peniko::Image`. Hoy el caller que quiere mostrar una imagen con `View::image()` hace: ```ignore let reader = ImageReader::open(path)?.with_guessed_format()?; let img = reader.decode()?; let rgba = img.to_rgba8(); let (w, h) = (rgba.width(), rgba.height()); let blob = Blob::from(rgba.into_raw()); let pen = Image::new(blob, ImageFormat::Rgba8, w, h); ``` Cinco líneas + dos llamadas a `?` por cada caller (nahual viewer, mirada wallpaper, viewer de gallería, etc.). Este crate las encapsula en dos helpers: - `decode_bytes` — toma `&[u8]` y devuelve `Result`. - `load_path` — toma `&Path` + `max_bytes` cap y devuelve `Result`, con guardia de tamaño en disco (las apps no quieren leer un .iso de 4 GB pensando que es una imagen). Con la feature `net` (opt-in, ureq síncrono) se suman descarga + caché por URL: `fetch_bytes`/`load_url` (bloqueantes, para correr en un worker) y `ImageCache` (`Clone + Send + Sync`) que la `view` consulta en el hilo UI mientras un `Handle::spawn` la puebla. El crate base queda sin dep de red. `image` (del crate `image`) se construye con `to_rgba8` siempre — la conversión necesaria para `peniko::ImageFormat::Rgba8`. Para imagen ya en `rgba8` en memoria (sin necesidad de decodificación), ver `from_rgba8`. Formatos: los que active la feature del crate `image` upstream (en el workspace, hoy: PNG, JPEG, WEBP). Otros se pueden habilitar agregando la feature; el helper no lo limita. --- Parte de **llimphi** — ver [llimphi](../LEEME.md).