use fontsdf::Font; use image::{GenericImage, GrayImage}; // const FONT_FILE: &[u8] = include_bytes!("../res/roboto/font.ttf"); // #[test] fn main_test() { let font = Font::from_bytes(FONT_FILE).unwrap(); let (metrics, simple) = font.rasterize('#', 128.0, false); GrayImage::from_raw(metrics.width as _, metrics.height as _, simple) .unwrap() .save("main_test_1.png") .unwrap(); let (metrics, sdf) = font.rasterize('#', 128.0, true); GrayImage::from_raw(metrics.width as _, metrics.height as _, sdf) .unwrap() .save("main_test_2.png") .unwrap(); } #[test] fn metrics_test() { const PX: f32 = 12.0; let font = Font::from_bytes(FONT_FILE).unwrap(); for character in (0_u8..=255_u8).map(char::from) { let (a, _) = font.rasterize_sdf(character, PX); let b = font.metrics_sdf(character, PX); assert_eq!(a, b, "character was: {character}"); } } #[test] fn all_chars() { let font = Font::from_bytes(FONT_FILE).unwrap(); let images: Vec<_> = (0_u8..=255_u8) .map(char::from) .filter_map(|character| { let (metrics, sdf) = font.rasterize(character, 64.0, true); let name = format!("test_all_chars_{}", character as u16); println!("{name}"); Some(( GrayImage::from_raw(metrics.width as _, metrics.height as _, sdf)?, name, )) }) .collect(); let width: u32 = images.iter().map(|(image, _)| image.width()).max().unwrap(); let height: u32 = images.iter().map(|(image, _)| image.height()).sum(); let mut combined = GrayImage::new(width, height); let mut y = 0; for (image, _) in images { combined .sub_image(0, y, image.width(), image.height()) .copy_from(&image, 0, 0) .unwrap(); y += image.height(); } combined.save("test_all_chars.png").unwrap(); }