Как я могу сделать белый фон прозрачным с ящиком изображения? - PullRequest
0 голосов
/ 13 февраля 2019

Вот минимальный пример кода, который должен преобразовать 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: /648498/ispolzuya-pil-chtoby-sdelat-vse-belye-pikseli-prozrachnymi
    // 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();
}
...