Краткий ответ:
alpha = image.split()[-1]
image = image.convert('RGB').rotate(angle)
image.putalpha(alpha.rotate(angle))
См. Исходный код:
https://github.com/python-pillow/Pillow/blob/master/src/PIL/Image.py#L2324
In transform()
, вызывается rotate()
:
if self.mode == "RGBA":
return (
self.convert("RGBa")
.transform(size, method, data, resample, fill, fillcolor)
.convert("RGBA")
)
Преобразование в RGBa умножит RGB на альфу в соответствии с этой частью:
https://github.com/python-pillow/Pillow/blob/master/src/libImaging/Convert.c#L489
static void
rgbA2rgba(UINT8* out, const UINT8* in, int xsize)
{
int x;
unsigned int alpha, tmp;
for (x = 0; x < xsize; x++) {
alpha = in[3];
*out++ = MULDIV255(*in++, alpha, tmp);
*out++ = MULDIV255(*in++, alpha, tmp);
*out++ = MULDIV255(*in++, alpha, tmp);
*out++ = *in++;
}
}