]> granicus.if.org Git - php/commitdiff
- #38179, imagecopy, palette to truecolor must use alpha channel too
authorPierre Joye <pajoye@php.net>
Sun, 23 Jul 2006 21:41:12 +0000 (21:41 +0000)
committerPierre Joye <pajoye@php.net>
Sun, 23 Jul 2006 21:41:12 +0000 (21:41 +0000)
ext/gd/libgd/gd.c
ext/gd/tests/38179.phpt [new file with mode: 0644]

index 6a2e8fbcd1f47b0f7213862f7335317883e7ff86..bb12cefc0cdb1888d72b05f6d11df0b26aabdd6f 100644 (file)
@@ -2161,7 +2161,7 @@ void gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX,
                                for (x = 0; (x < w); x++) {
                                        int c = gdImageGetPixel (src, srcX + x, srcY + y);
                                        if (c != src->transparent) {
-                                               gdImageSetPixel (dst, dstX + x, dstY + y, gdTrueColor(src->red[c], src->green[c], src->blue[c]));
+                                               gdImageSetPixel(dst, dstX + x, dstY + y, gdTrueColorAlpha(src->red[c], src->green[c], src->blue[c], src->alpha[c]));
                                        }
                                }
                        }
diff --git a/ext/gd/tests/38179.phpt b/ext/gd/tests/38179.phpt
new file mode 100644 (file)
index 0000000..01adaa3
--- /dev/null
@@ -0,0 +1,28 @@
+--TEST--
+imagecopy doen't copy alpha, palette to truecolor
+--SKIPIF--
+<?php
+        if (!function_exists('imagecopy')) die("skip gd extension not available\n");
+?>
+--FILE--
+<?php
+$src = imagecreate(5,5);
+$c0 = imagecolorallocate($src, 255,255,255);
+$c1 = imagecolorallocatealpha($src, 255,0,0,70);
+
+imagealphablending($src, 0);
+imagefill($src, 0,0, $c1);
+
+$dst_tc = imagecreatetruecolor(5,5);
+imagealphablending($dst_tc, 0);
+
+imagecopy($dst_tc, $src, 0,0, 0,0, imagesx($src), imagesy($src));
+
+$p1 = imagecolorat($dst_tc, 3,3);
+printf("%X\n", $p1);
+
+imagedestroy($src); imagedestroy($dst_tc);
+?>
+--EXPECTF--
+46FF0000
+