如何使用图像包装箱使白色背景透明?

时间:2019-02-13 12:24:27

标签: image rust rgba

这是一个最小的代码示例,应将rgb转换为rgba图片(目标:使白色背景透明):

extern crate image;

fn main() {
    // ```open``` returns a `DynamicImage` on success.
    let img = image::open("image_with_white_background.png").unwrap();

    // Should make white background transparent
    // Found a similar question: https://stackoverflow.com/questions/765736/using-pil-to-make-all-white-pixels-transparent
    // Is there a nice method for that loop (see the answer to the question above)?
    let img = img.to_rgba();

    img.save("image_with_transparent_background.png").unwrap();
}

它实际上并没有用,image_with_transparent_background.png中仍然有白色背景。

这是我使用的图像:

picture

更新:这段代码有效,但是我想知道是否还有更优雅的方法(例如,我可以重用现有的库调用)吗?

fn main() {
    let img = image::open("image_with_white_background.png").unwrap();


    let mut img = img.to_rgba();
    for p in img.pixels_mut() {
        if p[0] == 255 && p[1] == 255 && p[2] == 255 {
            p[3] = 0;
        }
    }

    img.save("image_with_transparent_background.png").unwrap();
}

0 个答案:

没有答案