diff options
author | Takeshi Abe <tabe@php.net> | 2009-03-18 15:30:37 +0000 |
---|---|---|
committer | Takeshi Abe <tabe@php.net> | 2009-03-18 15:30:37 +0000 |
commit | 3e3721be589072757c4336523875c69ade8cd532 (patch) | |
tree | e7bf8b15517f8fdf58bf3947ad29b5ad1230d438 | |
parent | daac1a6273af126a27dd76d9284c81099d6b202a (diff) | |
download | php-git-3e3721be589072757c4336523875c69ade8cd532.tar.gz |
MFH: Fixed libgd #186 (Tiling true colour with palette image does not work)
-rw-r--r-- | ext/gd/libgd/gd.c | 20 | ||||
-rw-r--r-- | ext/gd/tests/libgd00186.phpt | 36 |
2 files changed, 48 insertions, 8 deletions
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index ac54d12002..7760fecf20 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -860,23 +860,27 @@ static void gdImageBrushApply (gdImagePtr im, int x, int y) static void gdImageTileApply (gdImagePtr im, int x, int y) { + gdImagePtr tile = im->tile; int srcx, srcy; int p; - if (!im->tile) { + if (!tile) { return; } - srcx = x % gdImageSX(im->tile); - srcy = y % gdImageSY(im->tile); + srcx = x % gdImageSX(tile); + srcy = y % gdImageSY(tile); if (im->trueColor) { - p = gdImageGetTrueColorPixel(im->tile, srcx, srcy); - if (p != gdImageGetTransparent (im->tile)) { + p = gdImageGetPixel(tile, srcx, srcy); + if (p != gdImageGetTransparent (tile)) { + if (!tile->trueColor) { + p = gdTrueColorAlpha(tile->red[p], tile->green[p], tile->blue[p], tile->alpha[p]); + } gdImageSetPixel(im, x, y, p); } } else { - p = gdImageGetPixel(im->tile, srcx, srcy); + p = gdImageGetPixel(tile, srcx, srcy); /* Allow for transparency */ - if (p != gdImageGetTransparent(im->tile)) { - if (im->tile->trueColor) { + if (p != gdImageGetTransparent(tile)) { + if (tile->trueColor) { /* Truecolor tile. Very slow on a palette destination. */ gdImageSetPixel(im, x, y, gdImageColorResolveAlpha(im, gdTrueColorGetRed(p), diff --git a/ext/gd/tests/libgd00186.phpt b/ext/gd/tests/libgd00186.phpt new file mode 100644 index 0000000000..cb1686b5ac --- /dev/null +++ b/ext/gd/tests/libgd00186.phpt @@ -0,0 +1,36 @@ +--TEST-- +libgd #186 (Tiling true colour with palette image does not work) +--SKIPIF-- +<?php + if (!extension_loaded('gd')) die("skip gd extension not available\n"); +?> +--FILE-- +<?php +$im = imagecreatetruecolor(10,10); +$tile = imagecreate(10,10); +$red = imagecolorallocate($tile,0xff,0,0); +$green = imagecolorallocate($tile,0,0xff,0); +$blue = imagecolorallocate($tile,0,0,0xff); +$other = imagecolorallocate($tile,0,0,0x2); +imagefilledrectangle($tile,0,0,2,10,$red); +imagefilledrectangle($tile,3,0,4,10,$green); +imagefilledrectangle($tile,5,0,7,10,$blue); +imagefilledrectangle($tile,8,0,9,10,$other); +imagecolortransparent($tile,$blue); +imagesettile($im,$tile); +for ($i=0; $i<10; $i++) { + imagesetpixel($im,$i,$i,IMG_COLOR_TILED); +} +$index = imagecolorat($im,9,9); +$arr = imagecolorsforindex($im, $index); +if ($arr['blue'] == 2) { + $r = "Ok"; +} else { + $r = "Failed"; +} +imagedestroy($tile); +imagedestroy($im); +echo $r; +?> +--EXPECT-- +Ok |