mirror of
https://github.com/php/php-src.git
synced 2025-01-21 11:13:38 +08: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
@ -95,6 +95,8 @@ PHP 7.2 UPGRADE NOTES
|
||||
- GD:
|
||||
. Removed --enable-gd-native-ttf configuration option which was unused as
|
||||
of PHP 5.5.0 anyway.
|
||||
. imagegd() stores truecolor images as real truecolor images. Formerly, they
|
||||
have been converted to palette.
|
||||
|
||||
- Mbstring
|
||||
. 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);
|
||||
break;
|
||||
case PHP_GDIMG_TYPE_GD:
|
||||
if (im->trueColor){
|
||||
gdImageTrueColorToPalette(im,1,256);
|
||||
}
|
||||
(*func_p)(im, fp);
|
||||
break;
|
||||
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);
|
||||
break;
|
||||
case PHP_GDIMG_TYPE_GD:
|
||||
if (im->trueColor) {
|
||||
gdImageTrueColorToPalette(im,1,256);
|
||||
}
|
||||
(*func_p)(im, tmp);
|
||||
break;
|
||||
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…
Reference in New Issue
Block a user