diff options
-rw-r--r-- | ext/gd/libgd/gd.c | 2 | ||||
-rw-r--r-- | ext/gd/tests/38179.phpt | 28 |
2 files changed, 29 insertions, 1 deletions
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 6a2e8fbcd1..bb12cefc0c 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -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 index 0000000000..01adaa32c6 --- /dev/null +++ b/ext/gd/tests/38179.phpt @@ -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 + |