use std::io::Write;
use url::Url;
use crate::{ResourceUrlHandler, TerminalSize};
pub trait InlineImageProtocol {
fn write_inline_image(
&self,
writer: &mut dyn Write,
resource_handler: &dyn ResourceUrlHandler,
url: &Url,
terminal_size: TerminalSize,
) -> std::io::Result<()>;
}
#[cfg(feature = "image-processing")]
pub fn downsize_to_columns(
image: &image::DynamicImage,
size: TerminalSize,
) -> Option<image::DynamicImage> {
use image::{imageops::FilterType, GenericImageView};
use tracing::{event, Level};
let win_size = size.pixels?;
event!(
Level::DEBUG,
"Terminal size {:?}; image is {:?}",
size,
image.dimensions()
);
let (image_width, _) = image.dimensions();
if win_size.x < image_width {
Some(image.resize(win_size.x, win_size.y, FilterType::Nearest))
} else {
None
}
}