mirror of
https://github.com/python-pillow/Pillow.git
synced 2024-12-26 01:46:18 +03:00
If an alpha channel is present, only use that to get bounding box
This commit is contained in:
parent
1c1ad65a96
commit
b934b50867
|
@ -10,29 +10,32 @@ def test_sanity():
|
||||||
|
|
||||||
|
|
||||||
def test_bbox():
|
def test_bbox():
|
||||||
|
def check(im, fill_color):
|
||||||
|
assert im.getbbox() is None
|
||||||
|
|
||||||
|
im.paste(fill_color, (10, 25, 90, 75))
|
||||||
|
assert im.getbbox() == (10, 25, 90, 75)
|
||||||
|
|
||||||
|
im.paste(fill_color, (25, 10, 75, 90))
|
||||||
|
assert im.getbbox() == (10, 10, 90, 90)
|
||||||
|
|
||||||
|
im.paste(fill_color, (-10, -10, 110, 110))
|
||||||
|
assert im.getbbox() == (0, 0, 100, 100)
|
||||||
|
|
||||||
# 8-bit mode
|
# 8-bit mode
|
||||||
im = Image.new("L", (100, 100), 0)
|
im = Image.new("L", (100, 100), 0)
|
||||||
assert im.getbbox() is None
|
check(im, 255)
|
||||||
|
|
||||||
im.paste(255, (10, 25, 90, 75))
|
|
||||||
assert im.getbbox() == (10, 25, 90, 75)
|
|
||||||
|
|
||||||
im.paste(255, (25, 10, 75, 90))
|
|
||||||
assert im.getbbox() == (10, 10, 90, 90)
|
|
||||||
|
|
||||||
im.paste(255, (-10, -10, 110, 110))
|
|
||||||
assert im.getbbox() == (0, 0, 100, 100)
|
|
||||||
|
|
||||||
# 32-bit mode
|
# 32-bit mode
|
||||||
im = Image.new("RGB", (100, 100), 0)
|
im = Image.new("RGB", (100, 100), 0)
|
||||||
assert im.getbbox() is None
|
check(im, 255)
|
||||||
|
|
||||||
im.paste(255, (10, 25, 90, 75))
|
for mode in ("RGBA", "RGBa"):
|
||||||
assert im.getbbox() == (10, 25, 90, 75)
|
for color in ((0, 0, 0, 0), (127, 127, 127, 0), (255, 255, 255, 0)):
|
||||||
|
im = Image.new(mode, (100, 100), color)
|
||||||
|
check(im, (255, 255, 255, 255))
|
||||||
|
|
||||||
im.paste(255, (25, 10, 75, 90))
|
for mode in ("La", "LA", "PA"):
|
||||||
assert im.getbbox() == (10, 10, 90, 90)
|
for color in ((0, 0), (127, 0), (255, 0)):
|
||||||
|
im = Image.new(mode, (100, 100), color)
|
||||||
im.paste(255, (-10, -10, 110, 110))
|
check(im, (255, 255))
|
||||||
assert im.getbbox() == (0, 0, 100, 100)
|
|
||||||
|
|
|
@ -55,8 +55,19 @@ ImagingGetBBox(Imaging im, int bbox[4])
|
||||||
GETBBOX(image8, 0xff);
|
GETBBOX(image8, 0xff);
|
||||||
} else {
|
} else {
|
||||||
INT32 mask = 0xffffffff;
|
INT32 mask = 0xffffffff;
|
||||||
if (im->bands == 3)
|
if (im->bands == 3) {
|
||||||
((UINT8*) &mask)[3] = 0;
|
((UINT8*) &mask)[3] = 0;
|
||||||
|
} else if (strcmp(im->mode, "RGBa") == 0 ||
|
||||||
|
strcmp(im->mode, "RGBA") == 0 ||
|
||||||
|
strcmp(im->mode, "La") == 0 ||
|
||||||
|
strcmp(im->mode, "LA") == 0 ||
|
||||||
|
strcmp(im->mode, "PA") == 0) {
|
||||||
|
#ifdef WORDS_BIGENDIAN
|
||||||
|
mask = 0x000000ff;
|
||||||
|
#else
|
||||||
|
mask = 0xff000000;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
GETBBOX(image32, mask);
|
GETBBOX(image32, mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user