#图像压缩 #图像 #图像格式 #qoi #cli

bin+lib pixlzr

Pixlzr - 一个用于 pixlzr 图像格式的 Rust 库和 CLI

6 个版本

0.3.0 2024 年 2 月 1 日
0.2.2 2023 年 3 月 16 日
0.2.1 2023 年 1 月 11 日
0.1.1 2022 年 10 月 7 日

#131 in 压缩

每月 25 次下载

自定义许可证

3MB
1.5K SLoC

基于块级别细节检测的损失性图像压缩算法,用 Rust 实现。

pixzlr

Crate downloads Crate recent downloads Crate version Last GitHub commit

示例

> pixlzr -i <image input> -o <image output> --force

安装

只需将 pixlzr = "0" 作为 [dependencies] 之一添加到您的 Cargo.toml

通过 API 使用

在使用之前

现在,crate pixlzr 有两个并行 API,具有不同的用途和功能。

基本用途,减少/缩小 crate image::DynamicImage,存在于两者中。但在未来,旧 API 将被删除或基于新 API 重新编写,新 API 支持文件保存/读取。

使用旧 API

use image::{open, DynamicImage};
use pixlzr::process::{
    process,
    tree::{
        process as tree_process,
        full as tree_full_process
    }
};

// ...

let image: DynamicImage = open("img.png")?;

process(&image, 64, Some(|v| v / 4.0)): DynamicImage
    .save("img-processed.png")?;

tree_process(&image, 64, 0.25, Some(|v| v / 6.0)): DynamicImage
    .save("img-processed-tree.png")?;

tree_full_process(&image, 0.25, Some(|v| v / 6.0)): DynamicImage
    .save("img-processed-tree-full.png")?;

使用新 API

// Importing
use image::DynamicImage;
use pixlzr::{FilterType, Pixlzr};
// Convert to
let png: DynamicImage = ::image::open("img.png");

let mut pix = Pixlzr::from_image(&img, 64, 64u32);
pix.shrink_by(FilterType::Gaussian, 0.8);

pix.save("pix-lized image.pixlzr")?;
// Convert from
let pix = Pixlzr::open("pix-lized image.pixlzr")?;
let img = pix.to_image(FilterType::Nearest)?;
img.save("reduced-img.png");

CLI

对于 CLI 使用,安装

> cargo install pixlzr

可以使用 pixlzr -h 运行来理解 CLI

Pixlzr - A rust lib and CLI for the pixlzr image format

Usage: pixlzr [OPTIONS] --input <INPUT> --output <OUTPUT>

Options:
  -i, --input <INPUT>
          The input image file
  -o, --output <OUTPUT>
          The output image file
  -b, --block-width <BLOCK_WIDTH>
          The width of each block
          [default: 64]
      --block-height <BLOCK_HEIGHT>
          The height of each block
  -k, --shrinking-factor <SHRINKING_FACTOR>
          The shrinking factor: [+|-][1/][D][.D]
          If negative, is passed through max(0, 1 - x)
          [default: 1]
  -f, --filter <FILTER>
          The filter used when resizing the image blocks
          [default: lanczos3]
          [possible values: nearest, triangle, catmull-rom, gaussian, lanczos3]
  -d, --direction-wise <DIRECTION_WISE>
          Direction-wise scan
          [possible values: true, false]
      --force
          If image-2-image, force shrinking?
  -h, --help
          Print help (see more with '--help')
  -V, --version
          Print version

它使用 crate image 将数据从一种格式转换为另一种格式。

核心概念

待编写...
请检查 GitHub:guiga-zalu/smart-pixelizer,因为它是在 Node JS 中的实现。

依赖项

~3–7MB
~93K SLoC