Skip to content

Commit

Permalink
Merge pull request #6708 from radarhere/rgba2rgb_
Browse files Browse the repository at this point in the history
Resolves #6706
  • Loading branch information
hugovk committed Dec 28, 2022
2 parents 2755e0f + 5b4703d commit 88a81db
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
7 changes: 7 additions & 0 deletions Tests/test_image_convert.py
Expand Up @@ -104,6 +104,13 @@ def test_rgba_p():
assert_image_similar(im, comparable, 20)


def test_rgba():
with Image.open("Tests/images/transparent.png") as im:
assert im.mode == "RGBA"

assert_image_similar(im.convert("RGBa").convert("RGB"), im.convert("RGB"), 1.5)


def test_trns_p(tmp_path):
im = hopper("P")
im.info["transparency"] = 0
Expand Down
20 changes: 20 additions & 0 deletions src/libImaging/Convert.c
Expand Up @@ -479,6 +479,25 @@ rgba2rgbA(UINT8 *out, const UINT8 *in, int xsize) {
}
}

static void
rgba2rgb_(UINT8 *out, const UINT8 *in, int xsize) {
int x;
unsigned int alpha;
for (x = 0; x < xsize; x++, in += 4) {
alpha = in[3];
if (alpha == 255 || alpha == 0) {
*out++ = in[0];
*out++ = in[1];
*out++ = in[2];
} else {
*out++ = CLIP8((255 * in[0]) / alpha);
*out++ = CLIP8((255 * in[1]) / alpha);
*out++ = CLIP8((255 * in[2]) / alpha);
}
*out++ = 255;
}
}

/*
* Conversion of RGB + single transparent color to RGBA,
* where any pixel that matches the color will have the
Expand Down Expand Up @@ -934,6 +953,7 @@ static struct {
{"RGBA", "HSV", rgb2hsv},

{"RGBa", "RGBA", rgba2rgbA},
{"RGBa", "RGB", rgba2rgb_},

{"RGBX", "1", rgb2bit},
{"RGBX", "L", rgb2l},
Expand Down

0 comments on commit 88a81db

Please sign in to comment.