mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Don't enforce palette conversion when writing GD images
The GD image format is able to handle truecolor images as of libgd 2.0.12 (<https://github.com/libgd/libgd/blob/gd-2.2.3/src/gd_gd.c#L31-L33>). Therefore we don't need the potentially lossy and time consuming palette conversion. This way, imagegd() can also be used to export raw truecolor image data.
This commit is contained in:
parent
96305b456b
commit
d95b8eaf31
4 changed files with 36 additions and 6 deletions
|
@ -95,6 +95,8 @@ PHP 7.2 UPGRADE NOTES
|
||||||
- GD:
|
- GD:
|
||||||
. Removed --enable-gd-native-ttf configuration option which was unused as
|
. Removed --enable-gd-native-ttf configuration option which was unused as
|
||||||
of PHP 5.5.0 anyway.
|
of PHP 5.5.0 anyway.
|
||||||
|
. imagegd() stores truecolor images as real truecolor images. Formerly, they
|
||||||
|
have been converted to palette.
|
||||||
|
|
||||||
- Mbstring
|
- Mbstring
|
||||||
. mb_check_encoding() accepts array parameter. Both key and value
|
. mb_check_encoding() accepts array parameter. Both key and value
|
||||||
|
|
|
@ -2565,9 +2565,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
|
||||||
(*func_p)(im, i, fp);
|
(*func_p)(im, i, fp);
|
||||||
break;
|
break;
|
||||||
case PHP_GDIMG_TYPE_GD:
|
case PHP_GDIMG_TYPE_GD:
|
||||||
if (im->trueColor){
|
|
||||||
gdImageTrueColorToPalette(im,1,256);
|
|
||||||
}
|
|
||||||
(*func_p)(im, fp);
|
(*func_p)(im, fp);
|
||||||
break;
|
break;
|
||||||
case PHP_GDIMG_TYPE_GD2:
|
case PHP_GDIMG_TYPE_GD2:
|
||||||
|
@ -2619,9 +2616,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
|
||||||
(*func_p)(im, q, tmp);
|
(*func_p)(im, q, tmp);
|
||||||
break;
|
break;
|
||||||
case PHP_GDIMG_TYPE_GD:
|
case PHP_GDIMG_TYPE_GD:
|
||||||
if (im->trueColor) {
|
|
||||||
gdImageTrueColorToPalette(im,1,256);
|
|
||||||
}
|
|
||||||
(*func_p)(im, tmp);
|
(*func_p)(im, tmp);
|
||||||
break;
|
break;
|
||||||
case PHP_GDIMG_TYPE_GD2:
|
case PHP_GDIMG_TYPE_GD2:
|
||||||
|
|
34
ext/gd/tests/imagegd_truecolor.phpt
Normal file
34
ext/gd/tests/imagegd_truecolor.phpt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
--TEST--
|
||||||
|
imagegd() writes truecolor images without palette conversion
|
||||||
|
--SKIPIF--
|
||||||
|
<?php
|
||||||
|
if (!extension_loaded('gd')) die('skip gd extension not available');
|
||||||
|
?>
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require_once __DIR__ . DIRECTORY_SEPARATOR . 'func.inc';
|
||||||
|
|
||||||
|
$im = imagecreatetruecolor(10, 10);
|
||||||
|
$white = imagecolorallocate($im, 255, 255, 255);
|
||||||
|
imagefilledrectangle($im, 0,0, 9,9, $white);
|
||||||
|
$blue = imagecolorallocate($im, 0, 0, 255);
|
||||||
|
imagefilledrectangle($im, 3,3, 6,6, $blue);
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
imagegd($im);
|
||||||
|
$buffer = ob_get_clean();
|
||||||
|
|
||||||
|
$header = unpack('nsignature/nwidth/nheight/Ctruecolor', $buffer);
|
||||||
|
printf("signature: %d\n", $header['signature']);
|
||||||
|
printf("truecolor: %d\n", $header['truecolor']);
|
||||||
|
printf("size: %d\n", strlen($buffer));
|
||||||
|
|
||||||
|
test_image_equals_file(__DIR__ . DIRECTORY_SEPARATOR . 'imagegd_truecolor.png', $im);
|
||||||
|
?>
|
||||||
|
===DONE===
|
||||||
|
--EXPECT--
|
||||||
|
signature: 65534
|
||||||
|
truecolor: 1
|
||||||
|
size: 411
|
||||||
|
The images are equal.
|
||||||
|
===DONE===
|
BIN
ext/gd/tests/imagegd_truecolor.png
Normal file
BIN
ext/gd/tests/imagegd_truecolor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 117 B |
Loading…
Add table
Add a link
Reference in a new issue