mirror of
https://github.com/php/php-src.git
synced 2024-11-28 12:26:37 +08:00
MFH: Fixed libgd #186 (Tiling true colour with palette image does not work)
This commit is contained in:
parent
daac1a6273
commit
3e3721be58
@ -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),
|
||||
|
36
ext/gd/tests/libgd00186.phpt
Normal file
36
ext/gd/tests/libgd00186.phpt
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user