Browse Source

- #38179, imagecopy, palette to truecolor must use alpha channel too

PECL_OPENSSL
Pierre Joye 20 years ago
parent
commit
261beb0326
  1. 2
      ext/gd/libgd/gd.c
  2. 28
      ext/gd/tests/38179.phpt

2
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]));
}
}
}

28
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
Loading…
Cancel
Save