diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index ff2b0596f56..43a45939af7 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -2776,6 +2776,9 @@ gdImagePtr gdImageRotate90 (gdImagePtr src, int ignoretransparent) dst->transparent = src->transparent; if (dst != NULL) { + int old_blendmode = dst->alphaBlendingFlag; + dst->alphaBlendingFlag = 0; + gdImagePaletteCopy (dst, src); for (uY = 0; uYsy; uY++) { @@ -2795,6 +2798,7 @@ gdImagePtr gdImageRotate90 (gdImagePtr src, int ignoretransparent) } } } + dst->alphaBlendingFlag = old_blendmode; } return dst; @@ -2818,6 +2822,9 @@ gdImagePtr gdImageRotate180 (gdImagePtr src, int ignoretransparent) dst->transparent = src->transparent; if (dst != NULL) { + int old_blendmode = dst->alphaBlendingFlag; + dst->alphaBlendingFlag = 0; + gdImagePaletteCopy (dst, src); for (uY = 0; uYsy; uY++) { @@ -2838,6 +2845,7 @@ gdImagePtr gdImageRotate180 (gdImagePtr src, int ignoretransparent) } } } + dst->alphaBlendingFlag = old_blendmode; } return dst; @@ -2861,6 +2869,9 @@ gdImagePtr gdImageRotate270 (gdImagePtr src, int ignoretransparent) dst->transparent = src->transparent; if (dst != NULL) { + int old_blendmode = dst->alphaBlendingFlag; + dst->alphaBlendingFlag = 0; + gdImagePaletteCopy (dst, src); for (uY = 0; uYsy; uY++) { @@ -2881,6 +2892,7 @@ gdImagePtr gdImageRotate270 (gdImagePtr src, int ignoretransparent) } } } + dst->alphaBlendingFlag = old_blendmode; } return dst; diff --git a/ext/gd/tests/bug39366.phpt b/ext/gd/tests/bug39366.phpt new file mode 100644 index 00000000000..212012a1bd4 --- /dev/null +++ b/ext/gd/tests/bug39366.phpt @@ -0,0 +1,21 @@ +--TEST-- +Bug #39366 (imagerotate does not respect alpha with angles>45) +--SKIPIF-- + +--FILE-- + +--EXPECTF-- +32FF0000