- GD:
. Fixed bug #66005 (imagecopy does not support 1bit transparency on truecolor
images). (cmb)
+ . Fixed bug #72913 (imagecopy() loses single-color transparency on palette
+ images). (cmb)
- JSON:
. Fixed bug #72787 (json_decode reads out of bounds). (Jakub Zelenka)
return;
}
- /* Destination is palette based */
- if (src->trueColor) { /* But source is truecolor (Ouch!) */
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; x < (srcX + w); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
-
- /* Get best match possible. */
- nc = gdImageColorResolveAlpha(dst, gdTrueColorGetRed(c), gdTrueColorGetGreen(c), gdTrueColorGetBlue(c), gdTrueColorGetAlpha(c));
-
- gdImageSetPixel(dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
- return;
- }
-
/* Palette based to palette based */
for (i = 0; i < gdMaxColors; i++) {
colorMap[i] = (-1);
--- /dev/null
+--TEST--
+Bug #72913 (imagecopy() loses single-color transparency on palette images)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$base64 = 'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAABnRSTlMAAAAAAABu'
+ . 'pgeRAAAAVklEQVRYw+3UQQqAMBAEwf3/p9eTBxEPiWAmWMU8oGFJqgAAuOpzWTX3'
+ . 'xQUti+uRJTZ9V5aY1bOTFZLV7yZr9zt6ibv/qPXfrMpsGipbIy7oqQ8AYJED1plD'
+ . 'y5PCu2sAAAAASUVORK5CYII=';
+$src = imagecreatefromstring(base64_decode($base64));
+
+$dst = imagecreate(50, 50);
+$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
+imagealphablending($dst, false);
+imagesavealpha($dst, true);
+
+imagecopy($dst, $src, 0,0, 0,0, 50,50);
+
+ob_start();
+imagegd($dst);
+echo md5(ob_get_clean()), PHP_EOL;
+?>
+==DONE==
+--EXPECT--
+f03c27f20710e21debd7090c660f1a1e
+==DONE==