]> granicus.if.org Git - php/commitdiff
- MFH #39366, imagerotate does not use alpha with angles>45
authorPierre Joye <pajoye@php.net>
Sat, 4 Nov 2006 03:15:31 +0000 (03:15 +0000)
committerPierre Joye <pajoye@php.net>
Sat, 4 Nov 2006 03:15:31 +0000 (03:15 +0000)
NEWS
ext/gd/libgd/gd.c
ext/gd/tests/bug39366.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 67ce2cd8ff985a4a671643415f115e59b6e01ba2..000c6848445040666487c657fabcec039b4b8554 100644 (file)
--- 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)
index 1be12abc4b52d3617a49a84fb2532856efc855d4..bd6c9846147a35edfd620efafa8bcc312069f717 100644 (file)
@@ -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; uY<src->sy; 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; uY<src->sy; 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; uY<src->sy; 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 (file)
index 0000000..212012a
--- /dev/null
@@ -0,0 +1,21 @@
+--TEST--
+Bug #39366 (imagerotate does not respect alpha with angles>45)
+--SKIPIF--
+<?php 
+       if (!extension_loaded('gd')) die("skip gd extension not available\n"); 
+       if (!GD_BUNDLED) die('skip external GD libraries always fail');
+?>
+--FILE--
+<?php
+
+$im = imagecreatetruecolor(10,10);
+imagealphablending($im, 0);
+imagefilledrectangle($im, 0,0, 8,8, 0x32FF0000);
+$rotate = imagerotate($im, 180, 0);
+imagecolortransparent($rotate,0);
+imagesavealpha($rotate, true);
+$c = imagecolorat($rotate,5,5);
+printf("%X\n", $c);
+?>
+--EXPECTF--
+32FF0000