Skip to content

Commit 81fd113

Browse files
committed
Support TGA reading
We add PHP bindings for libgd's features to read TGA files, which are available as of libgd 2.1.0. As PHP's bundled libgd doesn't yet include the respective features of the external libgd, we add these. Since TGA has no easily recognizable file signature, we don't add TGA support for imagecreatefromstring() or getimagesize() and friends.
1 parent 2b4fc9e commit 81fd113

15 files changed

+512
-2
lines changed

NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ PHP NEWS
1212
- Date:
1313
. Fixed #69044 (discrepency between time and microtime). (krakjoe)
1414

15+
- GD:
16+
. Added TGA read support. (cmb)
17+
1518
- Opcache:
1619
. Fixed bug #78106 (Path resolution fails if opcache disabled during request).
1720
(Nikita)

UPGRADING

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,12 @@ PHP 7.4 UPGRADE NOTES
354354
exception that it ignores overloaded array casts, such as used by
355355
ArrayObject.
356356

357+
- GD:
358+
. Added imagecreatefromtga() function, which allows to read images in TGA
359+
format. TGA support is now also indicated by gd_info() and imagetypes().
360+
Note that TGA images are not recognized by imagecreatefromstring() and
361+
getimagesize().
362+
357363
- OpenSSL:
358364
. Added openssl_x509_verify(mixed cert, mixed key) function that verifies the
359365
signature of the certificate using a public key. A wrapper around the

ext/gd/config.m4

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ AC_DEFUN([PHP_GD_CHECK_VERSION],[
126126
PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
127127
PHP_CHECK_LIBRARY(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
128128
PHP_CHECK_LIBRARY(gd, gdImageCreateFromBmp, [AC_DEFINE(HAVE_GD_BMP, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
129+
PHP_CHECK_LIBRARY(gd, gdImageCreateFromTga, [AC_DEFINE(HAVE_GD_TGA, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
129130
PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_FREETYPE, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
130131
PHP_CHECK_LIBRARY(gd, gdVersionString, [AC_DEFINE(HAVE_GD_LIBVERSION, 1, [ ])], [], [ $GD_SHARED_LIBADD ])
131132
])
@@ -146,7 +147,7 @@ if test "$PHP_GD" != "no"; then
146147
libgd/gd_topal.c libgd/gd_gif_in.c libgd/gd_xbm.c libgd/gd_gif_out.c libgd/gd_security.c \
147148
libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_rotate.c libgd/gd_color_match.c \
148149
libgd/gd_transform.c libgd/gd_crop.c libgd/gd_interpolation.c libgd/gd_matrix.c \
149-
libgd/gd_bmp.c"
150+
libgd/gd_bmp.c libgd/gd_tga.c"
150151

151152
dnl check for fabsf and floorf which are available since C99
152153
AC_CHECK_FUNCS(fabsf floorf)
@@ -155,6 +156,7 @@ dnl These are always available with bundled library
155156
AC_DEFINE(HAVE_GD_BUNDLED, 1, [ ])
156157
AC_DEFINE(HAVE_GD_PNG, 1, [ ])
157158
AC_DEFINE(HAVE_GD_BMP, 1, [ ])
159+
AC_DEFINE(HAVE_GD_TGA, 1, [ ])
158160

159161
dnl Various checks for GD features
160162
PHP_GD_ZLIB

ext/gd/config.w32

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ if (PHP_GD != "no") {
4040
gd_io_file.c gd_io_ss.c gd_jpeg.c gdkanji.c gd_png.c gd_ss.c \
4141
gdtables.c gd_topal.c gd_wbmp.c gdxpm.c wbmp.c gd_xbm.c gd_security.c gd_transform.c \
4242
gd_filter.c gd_pixelate.c gd_rotate.c gd_color_match.c gd_webp.c \
43-
gd_crop.c gd_interpolation.c gd_matrix.c gd_bmp.c", "gd");
43+
gd_crop.c gd_interpolation.c gd_matrix.c gd_bmp.c gd_tga.c", "gd");
4444
AC_DEFINE('HAVE_LIBGD', 1, 'GD support');
4545
ADD_FLAG("CFLAGS_GD", " \
4646
/D HAVE_GD_DYNAMIC_CTX_EX=1 \
@@ -63,6 +63,7 @@ if (PHP_GD != "no") {
6363
/D HAVE_GD_XPM \
6464
/D HAVE_GD_FREETYPE=1 \
6565
/D HAVE_GD_BMP \
66+
/D HAVE_GD_TGA \
6667
/D HAVE_LIBGD13=1 \
6768
/D HAVE_LIBGD15=1 \
6869
/D HAVE_LIBGD20=1 \

ext/gd/gd.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,12 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefrombmp, 0)
356356
ZEND_END_ARG_INFO()
357357
#endif
358358

359+
#if defined(HAVE_GD_TGA)
360+
ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromtga, 0)
361+
ZEND_ARG_INFO(0, filename)
362+
ZEND_END_ARG_INFO()
363+
#endif
364+
359365
ZEND_BEGIN_ARG_INFO_EX(arginfo_imagexbm, 0, 0, 2)
360366
ZEND_ARG_INFO(0, im)
361367
ZEND_ARG_INFO(0, filename)
@@ -942,6 +948,9 @@ static const zend_function_entry gd_functions[] = {
942948
#ifdef HAVE_GD_BMP
943949
PHP_FE(imagecreatefrombmp, arginfo_imagecreatefrombmp)
944950
#endif
951+
#ifdef HAVE_GD_TGA
952+
PHP_FE(imagecreatefromtga, arginfo_imagecreatefromtga)
953+
#endif
945954
#ifdef HAVE_GD_PNG
946955
PHP_FE(imagepng, arginfo_imagepng)
947956
#endif
@@ -1109,6 +1118,7 @@ PHP_MINIT_FUNCTION(gd)
11091118
REGISTER_LONG_CONSTANT("IMG_XPM", PHP_IMG_XPM, CONST_CS | CONST_PERSISTENT);
11101119
REGISTER_LONG_CONSTANT("IMG_WEBP", PHP_IMG_WEBP, CONST_CS | CONST_PERSISTENT);
11111120
REGISTER_LONG_CONSTANT("IMG_BMP", PHP_IMG_BMP, CONST_CS | CONST_PERSISTENT);
1121+
REGISTER_LONG_CONSTANT("IMG_TGA", PHP_IMG_TGA, CONST_CS | CONST_PERSISTENT);
11121122

11131123
/* special colours for gd */
11141124
REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_CS | CONST_PERSISTENT);
@@ -1316,6 +1326,9 @@ PHP_MINFO_FUNCTION(gd)
13161326
#endif
13171327
#ifdef HAVE_GD_BMP
13181328
php_info_print_table_row(2, "BMP Support", "enabled");
1329+
#endif
1330+
#ifdef HAVE_GD_TGA
1331+
php_info_print_table_row(2, "TGA Read Support", "enabled");
13191332
#endif
13201333
php_info_print_table_end();
13211334
DISPLAY_INI_ENTRIES();
@@ -1373,6 +1386,11 @@ PHP_FUNCTION(gd_info)
13731386
#else
13741387
add_assoc_bool(return_value, "BMP Support", 0);
13751388
#endif
1389+
#ifdef HAVE_GD_TGA
1390+
add_assoc_bool(return_value, "TGA Read Support", 1);
1391+
#else
1392+
add_assoc_bool(return_value, "TGA Read Support", 0);
1393+
#endif
13761394
#if defined(USE_GD_JISX0208)
13771395
add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 1);
13781396
#else
@@ -2203,6 +2221,9 @@ PHP_FUNCTION(imagetypes)
22032221
#ifdef HAVE_GD_BMP
22042222
ret |= PHP_IMG_BMP;
22052223
#endif
2224+
#ifdef HAVE_GD_TGA
2225+
ret |= PHP_IMG_TGA;
2226+
#endif
22062227

22072228
if (zend_parse_parameters_none() == FAILURE) {
22082229
return;
@@ -2599,6 +2620,16 @@ PHP_FUNCTION(imagecreatefrombmp)
25992620
/* }}} */
26002621
#endif
26012622

2623+
#if defined(HAVE_GD_TGA)
2624+
/* {{{ proto resource imagecreatefromtga(string filename)
2625+
Create a new image from TGA file or URL */
2626+
PHP_FUNCTION(imagecreatefromtga)
2627+
{
2628+
_php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_TGA, "TGA", gdImageCreateFromTga, gdImageCreateFromTgaCtx);
2629+
}
2630+
/* }}} */
2631+
#endif
2632+
26022633
/* {{{ _php_image_output
26032634
*/
26042635
static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())

ext/gd/libgd/gd.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,10 @@ gdImagePtr gdImageCreateFromWebp(FILE *fd);
364364
gdImagePtr gdImageCreateFromWebpCtx(gdIOCtxPtr in);
365365
gdImagePtr gdImageCreateFromWebpPtr (int size, void *data);
366366

367+
gdImagePtr gdImageCreateFromTga( FILE * fp );
368+
gdImagePtr gdImageCreateFromTgaCtx(gdIOCtx* ctx);
369+
gdImagePtr gdImageCreateFromTgaPtr(int size, void *data);
370+
367371
gdImagePtr gdImageCreateFromBmp (FILE * inFile);
368372
gdImagePtr gdImageCreateFromBmpPtr (int size, void *data);
369373
gdImagePtr gdImageCreateFromBmpCtx (gdIOCtxPtr infile);

0 commit comments

Comments
 (0)