mirror of
https://github.com/fossasia/badgemagic-rs
synced 2025-07-15 17:13:59 +00:00
feat: add (non-animated) image support
This commit is contained in:
parent
1dd4c4cc43
commit
b794eec9a5
3 changed files with 802 additions and 13 deletions
793
Cargo.lock
generated
793
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
|
@ -51,4 +51,5 @@ serde_json = { version = "1.0.140", optional = true }
|
|||
time = "0.3.41"
|
||||
toml = { version = "0.9.0", optional = true }
|
||||
zerocopy = { version = "0.8.14", features = ["derive"] }
|
||||
u8g2-fonts = { version = "0.7.1", features = ["embedded_graphics_textstyle"], optional = true }
|
||||
u8g2-fonts = { version = "0.7.1", features = ["embedded_graphics_textstyle"], optional = true }
|
||||
image = "0.25.6"
|
19
src/main.rs
19
src/main.rs
|
@ -17,6 +17,7 @@ use embedded_graphics::{
|
|||
text::Text,
|
||||
Drawable, Pixel,
|
||||
};
|
||||
use image::{imageops::FilterType, ImageReader};
|
||||
use serde::Deserialize;
|
||||
use std::{fs, path::PathBuf};
|
||||
#[cfg(feature = "u8g2-fonts")]
|
||||
|
@ -97,6 +98,7 @@ enum Content {
|
|||
Bitstring { bitstring: String },
|
||||
BitmapBase64 { width: u32, bitmap_base64: String },
|
||||
BitmapFile { width: u32, bitmap_file: PathBuf },
|
||||
ImageFile { img_file: PathBuf },
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
|
@ -233,6 +235,23 @@ fn generate_payload(args: &mut Args) -> Result<PayloadBuffer> {
|
|||
let image = Image::new(&image_raw, Point::zero());
|
||||
payload.add_message_drawable(style, &image);
|
||||
}
|
||||
Content::ImageFile { img_file } => {
|
||||
let img_reader = ImageReader::open(img_file)?;
|
||||
let img = img_reader
|
||||
.decode()?
|
||||
.resize(u32::MAX, 11, FilterType::Nearest)
|
||||
.into_luma8();
|
||||
let (width, height) = img.dimensions();
|
||||
let mut buffer = payload.add_message(style, (width as usize + 7) / 8);
|
||||
for y in 0..height {
|
||||
for x in 0..width {
|
||||
if img.get_pixel(x, y).0 > [31] {
|
||||
Pixel(Point::new(x.try_into()?, y.try_into()?), BinaryColor::On)
|
||||
.draw(&mut buffer)?;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue