From d05ef39c74e53f8c7a31328c2cd8828f1c073e53 Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Sat, 4 Nov 2006 03:15:31 +0000 Subject: [PATCH] - MFH #39366, imagerotate does not use alpha with angles>45 --- NEWS | 3 ++- ext/gd/libgd/gd.c | 12 ++++++++++++ ext/gd/tests/bug39366.phpt | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 ext/gd/tests/bug39366.phpt diff --git a/NEWS b/NEWS index 67ce2cd8ff9..000c6848445 100644 --- a/NEWS +++ b/NEWS @@ -11,7 +11,8 @@ PHP NEWS . Make sure PHP_SELF is filtered in Apache 1 sapi. . Fixed bug #39358 (INSTALL_HEADERS contains incorrect reference to php_filter.h). -- Fixed bug #39273 (imagecopyresized may ignore alpha channel) +- Fixed bug #39366 (imagerotate does not use alpha with angle > 45°) (Pierre) +- Fixed bug #39273 (imagecopyresized may ignore alpha channel) (Pierre) - Fixed bug #39364 (Removed warning on empty haystack inside mb_strstr()). (Ilia) - Fixed bug #39354 (Allow building of curl extension against libcurl 7.16.0) diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 1be12abc4b5..bd6c9846147 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -2750,6 +2750,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++) { @@ -2769,6 +2772,7 @@ gdImagePtr gdImageRotate90 (gdImagePtr src, int ignoretransparent) } } } + dst->alphaBlendingFlag = old_blendmode; } return dst; @@ -2792,6 +2796,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++) { @@ -2812,6 +2819,7 @@ gdImagePtr gdImageRotate180 (gdImagePtr src, int ignoretransparent) } } } + dst->alphaBlendingFlag = old_blendmode; } return dst; @@ -2835,6 +2843,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++) { @@ -2855,6 +2866,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