diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2016-08-21 17:39:23 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2016-08-21 17:39:23 +0200 |
commit | d65adac2be2c9b32d9ad9bd00399c99d492502f5 (patch) | |
tree | 92631fdc31e37ba16cb0e46a7310557bd1da4485 | |
parent | 9eb5bbd8bd89caa29ba4fbeb2db27d3e4e05ed79 (diff) | |
download | php-git-d65adac2be2c9b32d9ad9bd00399c99d492502f5.tar.gz |
Fix #72913: imagecopy() loses single-color transparency on palette images
The proper code to handle true-color to palette copies is already contained
in gdImageCopy(), so we can simply remove the buggy duplicated code.
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | ext/gd/libgd/gd.c | 20 | ||||
-rw-r--r-- | ext/gd/tests/bug72913.phpt | 29 |
3 files changed, 31 insertions, 20 deletions
@@ -16,6 +16,8 @@ PHP NEWS - 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) diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 364697338e..0b4b42fa27 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -2266,26 +2266,6 @@ void gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, 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); diff --git a/ext/gd/tests/bug72913.phpt b/ext/gd/tests/bug72913.phpt new file mode 100644 index 0000000000..0ad03a7d3c --- /dev/null +++ b/ext/gd/tests/bug72913.phpt @@ -0,0 +1,29 @@ +--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== |