mirror of
https://github.com/sxyazi/yazi.git
synced 2026-07-25 08:41:05 +00:00
adaptor/src/image.rs: optimize code readability
This commit is contained in:
parent
cb13de9574
commit
04b71c0924
1 changed files with 15 additions and 10 deletions
|
|
@ -9,19 +9,22 @@ use tokio::fs;
|
||||||
pub struct Image;
|
pub struct Image;
|
||||||
|
|
||||||
impl Image {
|
impl Image {
|
||||||
pub(super) async fn crop(path: &Path, size: (u16, u16)) -> Result<DynamicImage> {
|
pub(super) async fn crop(
|
||||||
let (w, h) = Term::ratio()
|
path: &Path,
|
||||||
.map(|(w, h)| {
|
(target_width, target_height): (u16, u16),
|
||||||
let (w, h) = ((size.0 as f64 * w) as u32, (size.1 as f64 * h) as u32);
|
) -> Result<DynamicImage> {
|
||||||
(w.min(PREVIEW.max_width), h.min(PREVIEW.max_height))
|
let (max_width, max_height) = Term::ratio()
|
||||||
|
.map(|(a, b)| {
|
||||||
|
let (width, height) = ((target_width as f64 * a) as u32, (target_height as f64 * b) as u32);
|
||||||
|
(width.min(PREVIEW.max_width), height.min(PREVIEW.max_height))
|
||||||
})
|
})
|
||||||
.unwrap_or((PREVIEW.max_width, PREVIEW.max_height));
|
.unwrap_or((PREVIEW.max_width, PREVIEW.max_height));
|
||||||
|
|
||||||
let img = fs::read(path).await?;
|
let img = fs::read(path).await?;
|
||||||
let img = tokio::task::spawn_blocking(move || -> Result<DynamicImage> {
|
let img = tokio::task::spawn_blocking(move || -> Result<DynamicImage> {
|
||||||
let img = image::load_from_memory(&img)?;
|
let img = image::load_from_memory(&img)?;
|
||||||
Ok(if img.width() > w || img.height() > h {
|
Ok(if img.width() > max_width || img.height() > max_height {
|
||||||
img.resize(w, h, FilterType::Triangle)
|
img.resize(max_width, max_height, FilterType::Triangle)
|
||||||
} else {
|
} else {
|
||||||
img
|
img
|
||||||
})
|
})
|
||||||
|
|
@ -34,13 +37,15 @@ impl Image {
|
||||||
let cache = cache.as_ref().to_owned();
|
let cache = cache.as_ref().to_owned();
|
||||||
let result = tokio::task::spawn_blocking(move || {
|
let result = tokio::task::spawn_blocking(move || {
|
||||||
let img = image::load_from_memory(&img)?;
|
let img = image::load_from_memory(&img)?;
|
||||||
let (w, h) = (PREVIEW.max_width, PREVIEW.max_height);
|
let (max_width, max_height) = (PREVIEW.max_width, PREVIEW.max_height);
|
||||||
|
|
||||||
if img.width() <= w && img.height() <= h {
|
if img.width() <= max_width && img.height() <= max_height {
|
||||||
return Ok(false);
|
return Ok(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
img.resize(w, h, FilterType::Triangle).save_with_format(cache, ImageFormat::Jpeg)?;
|
img
|
||||||
|
.resize(max_width, max_height, FilterType::Triangle)
|
||||||
|
.save_with_format(cache, ImageFormat::Jpeg)?;
|
||||||
Ok(true)
|
Ok(true)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue