use crate::iter::ImageIterator;
use crate::{helpers, PhotonImage};
use image::{DynamicImage, Rgba};
use imageproc::distance_transform::Norm;
use imageproc::drawing::draw_text_mut;
use imageproc::morphology::dilate_mut;
use rusttype::{Font, Scale};
#[cfg(feature = "enable_wasm")]
use wasm_bindgen::prelude::*;
#[cfg_attr(feature = "enable_wasm", wasm_bindgen)]
pub fn draw_text_with_border(
photon_img: &mut PhotonImage,
text: &str,
x: i32,
y: i32,
font_size: f32,
) {
let mut image = helpers::dyn_image_from_raw(photon_img).to_rgba8();
let mut image2: DynamicImage =
DynamicImage::new_luma8(image.width(), image.height());
let font = Vec::from(include_bytes!("../fonts/Roboto-Regular.ttf") as &[u8]);
let font = Font::try_from_bytes(&font).unwrap();
let scale = Scale {
x: font_size * 1.0,
y: font_size,
};
draw_text_mut(
&mut image2,
Rgba([255u8, 255u8, 255u8, 255u8]),
x,
y,
scale,
&font,
text,
);
let mut image2 = image2.to_luma8();
dilate_mut(&mut image2, Norm::LInf, 4u8);
for (x, y) in ImageIterator::with_dimension(&image2.dimensions()) {
let pixval = 255 - image2.get_pixel(x, y)[0];
if pixval != 255 {
let new_pix = Rgba([pixval, pixval, pixval, 255]);
image.put_pixel(x, y, new_pix);
}
}
draw_text_mut(
&mut image,
Rgba([255u8, 255u8, 255u8, 255u8]),
x + 10,
y - 10,
scale,
&font,
text,
);
let dynimage = image::DynamicImage::ImageRgba8(image);
photon_img.raw_pixels = dynimage.into_bytes();
}
#[cfg_attr(feature = "enable_wasm", wasm_bindgen)]
pub fn draw_text(
photon_img: &mut PhotonImage,
text: &str,
x: i32,
y: i32,
font_size: f32,
) {
let mut image = helpers::dyn_image_from_raw(photon_img).to_rgba8();
let font = Vec::from(include_bytes!("../fonts/Roboto-Regular.ttf") as &[u8]);
let font = Font::try_from_bytes(&font).unwrap();
let scale = Scale {
x: font_size * 1.0,
y: font_size,
};
draw_text_mut(
&mut image,
Rgba([255u8, 255u8, 255u8, 255u8]),
x,
y,
scale,
&font,
text,
);
let dynimage = image::DynamicImage::ImageRgba8(image);
photon_img.raw_pixels = dynimage.into_bytes();
}