< 返回版块

cbtan 发表于 2024-09-18 15:10

Tags:图片压缩 压缩到指定大小

cargo.toml [dependencies] image = "0.25.2"

main.rs use image::{imageops::FilterType, GenericImageView}; fn main() {

let img: image::DynamicImage = image::open("C:/Users/t/Pictures/B438097临时/21.jpg").unwrap(); let img = img.resize(500, 500, FilterType::Lanczos3);

//我想知道如何在保存前通过内存的方法获取图片的实际大小,谢谢 //I want to know how to get the actual size of the picture by the method of memory before saving, thanks println!("{:?}", &img.as_bytes().len());

img.save("test.jpg").unwrap(); }

评论区

写评论
Bai-Jinlin 2024-10-06 11:36
use image::{codecs::jpeg::JpegEncoder, imageops::FilterType, ExtendedColorType};

fn main() {
    let img = image::open("t.jpg").unwrap();
    let img = img.resize(300, 300, FilterType::Lanczos3);

    let mut buf = Vec::new();
    let mut encoder = JpegEncoder::new(&mut buf);
    encoder
        .encode(
            img.as_bytes(),
            img.width(),
            img.height(),
            ExtendedColorType::Rgb8,
        )
        .unwrap();

    println!("file size:{}", buf.len());

    std::fs::write("save.jpg", buf).unwrap();
}
作者 cbtan 2024-10-01 17:14

还是不会写,能否给个例子?谢谢

--
👇
Chikage0o0: https://docs.rs/image/latest/image/trait.ImageEncoder.html

willingcoderverytime 2024-09-20 21:45

看一下压缩算法签名的文档里面有没有,如果没有只有解包才能知道。因为压缩算法就是一个重复字节归档规律,了解算法的老哥1k的压缩文件能解出来100G。 所以压缩文件如果没有签名是不知道大小的,有没有签名只有压缩算法才能控制,或者你压缩前记录,压缩完了之后,添加到压缩文件上。 但是这取决于这个压缩算法是否支持给文件加信息,比如map3 文件之类的可以加作者什么的。

BlackStone 2024-09-20 11:15

https://eleduck.com/posts/x0fEN7

我用的是libvips进行图片压缩,对比了好几个最终选的libvips.已经两三年了稳定运行.

Chikage0o0 2024-09-18 17:28

https://docs.rs/image/latest/image/trait.ImageEncoder.html

1 共 5 条评论, 1 页