diff --git a/ext/gd/config.m4 b/ext/gd/config.m4 index 9152c1926fe66..5d02bed7858ba 100644 --- a/ext/gd/config.m4 +++ b/ext/gd/config.m4 @@ -159,18 +159,11 @@ AC_DEFUN([PHP_GD_XPM],[ if test "$PHP_XPM_DIR" != "no"; then for i in $PHP_XPM_DIR /usr/local /usr/X11R6 /usr; do - test -f $i/$PHP_LIBDIR/libXpm.$SHLIB_SUFFIX_NAME || test -f $i/$PHP_LIBDIR/libXpm.a && GD_XPM_DIR=$i && break + test -f $i/include/xpm.h && GD_XPM_DIR=$i && GD_XPM_INC=$i && break + test -f $i/include/X11/xpm.h && GD_XPM_DIR=$i && GD_XPM_INC=$i/X11 && break done if test -z "$GD_XPM_DIR"; then - AC_MSG_ERROR([libXpm.(a|so) not found.]) - fi - - for i in include include/X11; do - test -f $GD_XPM_DIR/$i/xpm.h && GD_XPM_INC=$GD_XPM_DIR/include - done - - if test -z "$GD_XPM_INC"; then AC_MSG_ERROR([xpm.h not found.]) fi @@ -259,41 +252,33 @@ AC_DEFUN([PHP_GD_JISX0208],[ ]) AC_DEFUN([PHP_GD_CHECK_VERSION],[ - PHP_CHECK_LIBRARY(gd, gdImageString16, [AC_DEFINE(HAVE_LIBGD13, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImagePaletteCopy, [AC_DEFINE(HAVE_LIBGD15, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromPng, [AC_DEFINE(HAVE_GD_PNG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageCreateFromGif, [AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageGif, [AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageWBMP, [AC_DEFINE(HAVE_GD_WBMP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromWebp, [AC_DEFINE(HAVE_GD_WEBP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) PHP_CHECK_LIBRARY(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageCreateFromGd2, [AC_DEFINE(HAVE_GD_GD2, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageCreateTrueColor, [AC_DEFINE(HAVE_LIBGD20, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageSetTile, [AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageEllipse, [AC_DEFINE(HAVE_GD_IMAGEELLIPSE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageSetBrush, [AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageStringTTF, [AC_DEFINE(HAVE_GD_STRINGTTF, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageStringFTEx, [AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageColorClosestHWB, [AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageColorResolve, [AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageGifCtx, [AC_DEFINE(HAVE_GD_GIF_CTX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdCacheCreate, [AC_DEFINE(HAVE_GD_CACHE_CREATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdFontCacheShutdown, [AC_DEFINE(HAVE_GD_FONTCACHESHUTDOWN,1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdFreeFontCache, [AC_DEFINE(HAVE_GD_FREEFONTCACHE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdFontCacheMutexSetup, [AC_DEFINE(HAVE_GD_FONTMUTEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdNewDynamicCtxEx, [AC_DEFINE(HAVE_GD_DYNAMIC_CTX_EX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageConvolution, [AC_DEFINE(HAVE_GD_IMAGE_CONVOLUTION, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImagePixelate, [AC_DEFINE(HAVE_GD_IMAGE_PIXELATE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageFlipBoth, [AC_DEFINE(HAVE_GD_IMAGE_FLIP, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) - PHP_CHECK_LIBRARY(gd, gdImageCreateFromJpegEx,[AC_DEFINE(HAVE_GD_JPGEX, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) + PHP_CHECK_LIBRARY(gd, gdImageStringFT, [AC_DEFINE(HAVE_GD_FREETYPE, 1, [ ])], [], [ -L$GD_LIB $GD_SHARED_LIBADD ]) ]) dnl dnl Main GD configure dnl +dnl +dnl Common for both builtin and external GD +dnl +if test "$PHP_GD" != "no"; then +dnl Various checks for GD features + PHP_GD_ZLIB + PHP_GD_TTSTR + PHP_GD_VPX + PHP_GD_JPEG + PHP_GD_PNG + PHP_GD_XPM + PHP_GD_FREETYPE2 + PHP_GD_T1LIB + PHP_GD_JISX0208 +fi + if test "$PHP_GD" = "yes"; then GD_MODULE_TYPE=builtin extra_sources="libgd/gd.c libgd/gd_gd.c libgd/gd_gd2.c libgd/gd_io.c libgd/gd_io_dp.c \ @@ -303,7 +288,7 @@ if test "$PHP_GD" = "yes"; then libgd/gdcache.c libgd/gdkanji.c libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c \ libgd/gd_topal.c libgd/gd_gif_in.c libgd/xbm.c libgd/gd_gif_out.c libgd/gd_security.c \ libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_arc.c libgd/gd_rotate.c libgd/gd_color.c \ - libgd/gd_transform.c libgd/gd_crop.c libgd/gd_interpolation.c libgd/gd_matrix.c" + libgd/gd_transform.c libgd/gd_crop.c libgd/gd_interpolation.c libgd/gd_matrix.c" dnl check for fabsf and floorf which are available since C99 AC_CHECK_FUNCS(fabsf floorf) @@ -311,40 +296,10 @@ dnl check for fabsf and floorf which are available since C99 dnl PNG is required by GD library test "$PHP_PNG_DIR" = "no" && PHP_PNG_DIR=yes -dnl Various checks for GD features - PHP_GD_ZLIB - PHP_GD_TTSTR - PHP_GD_JISX0208 - PHP_GD_JPEG - PHP_GD_VPX - PHP_GD_PNG - PHP_GD_XPM - PHP_GD_FREETYPE2 - PHP_GD_T1LIB - dnl These are always available with bundled library - AC_DEFINE(HAVE_LIBGD, 1, [ ]) - AC_DEFINE(HAVE_LIBGD13, 1, [ ]) - AC_DEFINE(HAVE_LIBGD15, 1, [ ]) - AC_DEFINE(HAVE_LIBGD20, 1, [ ]) - AC_DEFINE(HAVE_LIBGD204, 1, [ ]) - AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ]) - AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ]) - AC_DEFINE(HAVE_GDIMAGECOLORRESOLVE, 1, [ ]) - AC_DEFINE(HAVE_COLORCLOSESTHWB, 1, [ ]) - AC_DEFINE(HAVE_GD_WBMP, 1, [ ]) - AC_DEFINE(HAVE_GD_GD2, 1, [ ]) - AC_DEFINE(HAVE_GD_PNG, 1, [ ]) - AC_DEFINE(HAVE_GD_XBM, 1, [ ]) AC_DEFINE(HAVE_GD_BUNDLED, 1, [ ]) - AC_DEFINE(HAVE_GD_GIF_READ, 1, [ ]) - AC_DEFINE(HAVE_GD_GIF_CREATE, 1, [ ]) - AC_DEFINE(HAVE_GD_IMAGEELLIPSE, 1, [ ]) - AC_DEFINE(HAVE_GD_FONTCACHESHUTDOWN,1, [ ]) - AC_DEFINE(HAVE_GD_FONTMUTEX, 1, [ ]) - AC_DEFINE(HAVE_GD_DYNAMIC_CTX_EX, 1, [ ]) - AC_DEFINE(HAVE_GD_GIF_CTX, 1, [ ]) - AC_DEFINE(HAVE_GD_IMAGE_FLIP, 1, [ ]) + AC_DEFINE(HAVE_GD_PNG, 1, [ ]) + AC_DEFINE(HAVE_GD_CACHE_CREATE 1, [ ]) dnl Make sure the libgd/ is first in the include path GDLIB_CFLAGS="-DHAVE_LIBPNG" @@ -359,7 +314,6 @@ dnl enable the support in bundled GD library if test -n "$GD_JPEG_DIR"; then AC_DEFINE(HAVE_GD_JPG, 1, [ ]) - AC_DEFINE(HAVE_GD_JPGEX, 1, [ ]) GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBJPEG" fi @@ -369,8 +323,7 @@ dnl enable the support in bundled GD library fi if test -n "$FREETYPE2_DIR"; then - AC_DEFINE(HAVE_GD_STRINGFT, 1, [ ]) - AC_DEFINE(HAVE_GD_STRINGFTEX, 1, [ ]) + AC_DEFINE(HAVE_GD_FREETYPE, 1, [ ]) AC_DEFINE(ENABLE_GD_TTF, 1, [ ]) GDLIB_CFLAGS="$GDLIB_CFLAGS -DHAVE_LIBFREETYPE -DENABLE_GD_TTF" fi @@ -384,8 +337,6 @@ else if test "$PHP_GD" != "no"; then GD_MODULE_TYPE=external - extra_sources="gdcache.c libgd/gd_compat.c libgd/gd_filter.c libgd/gd_pixelate.c libgd/gd_arc.c \ - libgd/gd_rotate.c libgd/gd_color.c" dnl Various checks for GD features PHP_GD_ZLIB @@ -398,44 +349,29 @@ dnl Various checks for GD features PHP_GD_T1LIB dnl Header path - for i in include/gd1.3 include/gd include gd1.3 gd ""; do + for i in include/gd include gd ""; do test -f "$PHP_GD/$i/gd.h" && GD_INCLUDE="$PHP_GD/$i" done -dnl Library path - for i in $PHP_LIBDIR/gd1.3 $PHP_LIBDIR/gd $PHP_LIBDIR gd1.3 gd ""; do - test -f "$PHP_GD/$i/libgd.$SHLIB_SUFFIX_NAME" || test -f "$PHP_GD/$i/libgd.a" && GD_LIB="$PHP_GD/$i" - done - - if test -n "$GD_INCLUDE" && test -n "$GD_LIB"; then - PHP_ADD_LIBRARY_WITH_PATH(gd, $GD_LIB, GD_SHARED_LIBADD) - AC_DEFINE(HAVE_LIBGD,1,[ ]) - PHP_GD_CHECK_VERSION - elif test -z "$GD_INCLUDE"; then + if test -z "$GD_INCLUDE"; then AC_MSG_ERROR([Unable to find gd.h anywhere under $PHP_GD]) - else - AC_MSG_ERROR([Unable to find libgd.(a|so) anywhere under $PHP_GD]) fi - PHP_EXPAND_PATH($GD_INCLUDE, GD_INCLUDE) +dnl Library path - dnl - dnl Check for gd 2.0.4 greater availability - dnl - old_CPPFLAGS=$CPPFLAGS - CPPFLAGS=-I$GD_INCLUDE - AC_TRY_COMPILE([ -#include -#include - ], [ -gdIOCtx *ctx; -ctx = malloc(sizeof(gdIOCtx)); -ctx->gd_free = 1; - ], [ - AC_DEFINE(HAVE_LIBGD204, 1, [ ]) + PHP_CHECK_LIBRARY(gd, gdSetErrorMethod, + [ + PHP_ADD_LIBRARY_WITH_PATH(gd, $PHP_GD/$PHP_LIBDIR, GD_SHARED_LIBADD) + AC_DEFINE(HAVE_LIBGD, 1, [ ]) + ],[ + AC_MSG_ERROR([Unable to find libgd.(a|so) >= 2.1.0 anywhere under $PHP_GD]) + ],[ + -L$GD_PHP/$PHP_LIBDIR ]) - CPPFLAGS=$old_CPPFLAGS + PHP_GD_CHECK_VERSION + + PHP_EXPAND_PATH($GD_INCLUDE, GD_INCLUDE) fi fi @@ -445,9 +381,8 @@ dnl if test "$PHP_GD" != "no"; then PHP_NEW_EXTENSION(gd, gd.c $extra_sources, $ext_shared,, \\$(GDLIB_CFLAGS)) - PHP_ADD_BUILD_DIR($ext_builddir/libgd) - - if test "$GD_MODULE_TYPE" = "builtin"; then + if test "$GD_MODULE_TYPE" = "builtin"; then + PHP_ADD_BUILD_DIR($ext_builddir/libgd) GDLIB_CFLAGS="-I$ext_srcdir/libgd $GDLIB_CFLAGS" GD_HEADER_DIRS="ext/gd/ ext/gd/libgd/" diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 4e118d16b453a..f412b2f03bb09 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -29,6 +29,14 @@ #include "config.h" #endif +#ifdef HAVE_GD_PNG +#include +#endif + +#ifdef HAVE_GD_JPG +# include +#endif + #include "php.h" #include "php_ini.h" #include "ext/standard/head.h" @@ -53,12 +61,41 @@ # include #endif -#if HAVE_LIBGD -#if !HAVE_GD_BUNDLED -# include "libgd/gd_compat.h" -#else -extern int overflow2(int a, int b); -#endif +#ifndef HAVE_GD_BUNDLED +#ifdef HAVE_GD_PNG +const char * gdPngGetVersionString() +{ + return PNG_LIBPNG_VER_STRING; +} +#endif /* HAVE_GD_PNG */ + +#ifdef HAVE_GD_JPG +int gdJpegGetVersionInt() +{ + return JPEG_LIB_VERSION; +} + +const char * gdJpegGetVersionString() +{ + switch(JPEG_LIB_VERSION) { + case 62: + return "6b"; + break; + + case 70: + return "7"; + break; + + case 80: + return "8"; + break; + + default: + return "unknown"; + } +} +#endif /* HAVE_GD_JPG */ +#endif /* HAVE_GD_BUNDLED */ static int le_gd, le_gd_font; #if HAVE_LIBT1 @@ -75,9 +112,6 @@ static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC); #include /* 4 Large font */ #include /* 5 Giant font */ -#ifdef HAVE_GD_WBMP -#include "libgd/wbmp.h" -#endif #ifdef ENABLE_GD_TTF # ifdef HAVE_LIBFREETYPE # include @@ -93,38 +127,7 @@ static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC); static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int, int); #endif -#if HAVE_LIBGD15 -/* it's >= 1.5, i.e. has IOCtx */ -#define USE_GD_IOCTX 1 -#else -#undef USE_GD_IOCTX -#endif - -#ifdef USE_GD_IOCTX #include "gd_ctx.c" -#else -#define gdImageCreateFromGdCtx NULL -#define gdImageCreateFromGd2Ctx NULL -#define gdImageCreateFromGd2partCtx NULL -#define gdImageCreateFromGifCtx NULL -#define gdImageCreateFromJpegCtx NULL -#define gdImageCreateFromPngCtx NULL -#define gdImageCreateFromWBMPCtx NULL -typedef FILE gdIOCtx; -#define CTX_PUTC(c, fp) fputc(c, fp) -#endif - -#ifndef HAVE_GDIMAGECOLORRESOLVE -extern int gdImageColorResolve(gdImagePtr, int, int, int); -#endif - -#if HAVE_COLORCLOSESTHWB -int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b); -#endif - -#ifndef HAVE_GD_DYNAMIC_CTX_EX -#define gdNewDynamicCtxEx(len, data, val) gdNewDynamicCtx(len, data) -#endif /* Section Filters Declarations */ /* IMPORTANT NOTE FOR NEW FILTER @@ -241,12 +244,10 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagesavealpha, 0) ZEND_ARG_INFO(0, save) ZEND_END_ARG_INFO() -#if HAVE_GD_BUNDLED ZEND_BEGIN_ARG_INFO(arginfo_imagelayereffect, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, effect) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecolorallocatealpha, 0) ZEND_ARG_INFO(0, im) @@ -310,19 +311,15 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_imagerotate, 0, 0, 3) ZEND_ARG_INFO(0, ignoretransparent) ZEND_END_ARG_INFO() -#if HAVE_GD_IMAGESETTILE ZEND_BEGIN_ARG_INFO(arginfo_imagesettile, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, tile) ZEND_END_ARG_INFO() -#endif -#if HAVE_GD_IMAGESETBRUSH ZEND_BEGIN_ARG_INFO(arginfo_imagesetbrush, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, brush) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecreate, 0) ZEND_ARG_INFO(0, x_size) @@ -332,17 +329,13 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_imagetypes, 0) ZEND_END_ARG_INFO() -#if HAVE_LIBGD15 ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromstring, 0) ZEND_ARG_INFO(0, image) ZEND_END_ARG_INFO() -#endif -#ifdef HAVE_GD_GIF_READ ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromgif, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#endif #ifdef HAVE_GD_JPG ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromjpeg, 0) @@ -362,29 +355,24 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromwebp, 0) ZEND_END_ARG_INFO() #endif -#ifdef HAVE_GD_XBM ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromxbm, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#endif -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromxpm, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() #endif -#ifdef HAVE_GD_WBMP ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromwbmp, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromgd, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#ifdef HAVE_GD_GD2 ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromgd2, 0) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() @@ -396,22 +384,17 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromgd2part, 0) ZEND_ARG_INFO(0, width) ZEND_ARG_INFO(0, height) ZEND_END_ARG_INFO() -#endif -#if HAVE_GD_BUNDLED ZEND_BEGIN_ARG_INFO_EX(arginfo_imagexbm, 0, 0, 2) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, foreground) ZEND_END_ARG_INFO() -#endif -#ifdef HAVE_GD_GIF_CREATE ZEND_BEGIN_ARG_INFO_EX(arginfo_imagegif, 0, 0, 1) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#endif #ifdef HAVE_GD_PNG ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepng, 0, 0, 1) @@ -435,27 +418,23 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_imagejpeg, 0, 0, 1) ZEND_END_ARG_INFO() #endif -#ifdef HAVE_GD_WBMP ZEND_BEGIN_ARG_INFO_EX(arginfo_imagewbmp, 0, 0, 1) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, foreground) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO_EX(arginfo_imagegd, 0, 0, 1) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_END_ARG_INFO() -#ifdef HAVE_GD_GD2 ZEND_BEGIN_ARG_INFO_EX(arginfo_imagegd2, 0, 0, 1) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, chunk_size) ZEND_ARG_INFO(0, type) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagedestroy, 0) ZEND_ARG_INFO(0, im) @@ -468,12 +447,10 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecolorallocate, 0) ZEND_ARG_INFO(0, blue) ZEND_END_ARG_INFO() -#if HAVE_LIBGD15 ZEND_BEGIN_ARG_INFO(arginfo_imagepalettecopy, 0) ZEND_ARG_INFO(0, dst) ZEND_ARG_INFO(0, src) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecolorat, 0) ZEND_ARG_INFO(0, im) @@ -488,14 +465,12 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecolorclosest, 0) ZEND_ARG_INFO(0, blue) ZEND_END_ARG_INFO() -#if HAVE_COLORCLOSESTHWB ZEND_BEGIN_ARG_INFO(arginfo_imagecolorclosesthwb, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, red) ZEND_ARG_INFO(0, green) ZEND_ARG_INFO(0, blue) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecolordeallocate, 0) ZEND_ARG_INFO(0, im) @@ -697,7 +672,6 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecopy, 0) ZEND_ARG_INFO(0, src_h) ZEND_END_ARG_INFO() -#if HAVE_LIBGD15 ZEND_BEGIN_ARG_INFO(arginfo_imagecopymerge, 0) ZEND_ARG_INFO(0, src_im) ZEND_ARG_INFO(0, dst_im) @@ -721,7 +695,6 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagecopymergegray, 0) ZEND_ARG_INFO(0, src_h) ZEND_ARG_INFO(0, pct) ZEND_END_ARG_INFO() -#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecopyresized, 0) ZEND_ARG_INFO(0, dst_im) @@ -745,7 +718,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagesy, 0) ZEND_END_ARG_INFO() #ifdef ENABLE_GD_TTF -#if HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX +#if HAVE_LIBFREETYPE ZEND_BEGIN_ARG_INFO_EX(arginfo_imageftbbox, 0, 0, 4) ZEND_ARG_INFO(0, size) ZEND_ARG_INFO(0, angle) @@ -841,15 +814,13 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepsbbox, 0, 0, 3) ZEND_END_ARG_INFO() #endif -#ifdef HAVE_GD_WBMP ZEND_BEGIN_ARG_INFO_EX(arginfo_image2wbmp, 0, 0, 1) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, filename) ZEND_ARG_INFO(0, threshold) ZEND_END_ARG_INFO() -#endif -#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_JPG) ZEND_BEGIN_ARG_INFO(arginfo_jpeg2wbmp, 0) ZEND_ARG_INFO(0, f_org) ZEND_ARG_INFO(0, f_dest) @@ -859,7 +830,7 @@ ZEND_BEGIN_ARG_INFO(arginfo_jpeg2wbmp, 0) ZEND_END_ARG_INFO() #endif -#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_PNG) ZEND_BEGIN_ARG_INFO(arginfo_png2wbmp, 0) ZEND_ARG_INFO(0, f_org) ZEND_ARG_INFO(0, f_dest) @@ -885,18 +856,17 @@ ZEND_BEGIN_ARG_INFO(arginfo_imageconvolution, 0) ZEND_ARG_INFO(0, offset) ZEND_END_ARG_INFO() -#ifdef HAVE_GD_IMAGE_FLIP ZEND_BEGIN_ARG_INFO(arginfo_imageflip, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, mode) ZEND_END_ARG_INFO() -#endif #ifdef HAVE_GD_BUNDLED ZEND_BEGIN_ARG_INFO(arginfo_imageantialias, 0) ZEND_ARG_INFO(0, im) ZEND_ARG_INFO(0, on) ZEND_END_ARG_INFO() +#endif ZEND_BEGIN_ARG_INFO(arginfo_imagecrop, 0) ZEND_ARG_INFO(0, im) @@ -938,8 +908,6 @@ ZEND_BEGIN_ARG_INFO(arginfo_imagesetinterpolation, 0) ZEND_ARG_INFO(0, method) ZEND_END_ARG_INFO() -#endif - /* }}} */ /* {{{ gd_functions[] @@ -952,14 +920,10 @@ const zend_function_entry gd_functions[] = { PHP_FE(imagecharup, arginfo_imagecharup) PHP_FE(imagecolorat, arginfo_imagecolorat) PHP_FE(imagecolorallocate, arginfo_imagecolorallocate) -#if HAVE_LIBGD15 PHP_FE(imagepalettecopy, arginfo_imagepalettecopy) PHP_FE(imagecreatefromstring, arginfo_imagecreatefromstring) -#endif PHP_FE(imagecolorclosest, arginfo_imagecolorclosest) -#if HAVE_COLORCLOSESTHWB PHP_FE(imagecolorclosesthwb, arginfo_imagecolorclosesthwb) -#endif PHP_FE(imagecolordeallocate, arginfo_imagecolordeallocate) PHP_FE(imagecolorresolve, arginfo_imagecolorresolve) PHP_FE(imagecolorexact, arginfo_imagecolorexact) @@ -968,10 +932,8 @@ const zend_function_entry gd_functions[] = { PHP_FE(imagecolorstotal, arginfo_imagecolorstotal) PHP_FE(imagecolorsforindex, arginfo_imagecolorsforindex) PHP_FE(imagecopy, arginfo_imagecopy) -#if HAVE_LIBGD15 PHP_FE(imagecopymerge, arginfo_imagecopymerge) PHP_FE(imagecopymergegray, arginfo_imagecopymergegray) -#endif PHP_FE(imagecopyresized, arginfo_imagecopyresized) PHP_FE(imagecreate, arginfo_imagecreate) PHP_FE(imagecreatetruecolor, arginfo_imagecreatetruecolor) @@ -995,13 +957,11 @@ const zend_function_entry gd_functions[] = { #endif PHP_FE(imagerotate, arginfo_imagerotate) - -#ifdef HAVE_GD_IMAGE_FLIP PHP_FE(imageflip, arginfo_imageflip) -#endif #ifdef HAVE_GD_BUNDLED PHP_FE(imageantialias, arginfo_imageantialias) +#endif PHP_FE(imagecrop, arginfo_imagecrop) PHP_FE(imagecropauto, arginfo_imagecropauto) PHP_FE(imagescale, arginfo_imagescale) @@ -1009,16 +969,8 @@ const zend_function_entry gd_functions[] = { PHP_FE(imageaffinematrixconcat, arginfo_imageaffinematrixconcat) PHP_FE(imageaffinematrixget, arginfo_imageaffinematrixget) PHP_FE(imagesetinterpolation, arginfo_imagesetinterpolation) -#endif - -#if HAVE_GD_IMAGESETTILE PHP_FE(imagesettile, arginfo_imagesettile) -#endif - -#if HAVE_GD_IMAGESETBRUSH PHP_FE(imagesetbrush, arginfo_imagesetbrush) -#endif - PHP_FE(imagesetstyle, arginfo_imagesetstyle) #ifdef HAVE_GD_PNG @@ -1027,45 +979,31 @@ const zend_function_entry gd_functions[] = { #ifdef HAVE_GD_WEBP PHP_FE(imagecreatefromwebp, arginfo_imagecreatefromwebp) #endif -#ifdef HAVE_GD_GIF_READ PHP_FE(imagecreatefromgif, arginfo_imagecreatefromgif) -#endif #ifdef HAVE_GD_JPG PHP_FE(imagecreatefromjpeg, arginfo_imagecreatefromjpeg) #endif -#ifdef HAVE_GD_WBMP PHP_FE(imagecreatefromwbmp, arginfo_imagecreatefromwbmp) -#endif -#ifdef HAVE_GD_XBM PHP_FE(imagecreatefromxbm, arginfo_imagecreatefromxbm) -#endif -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) PHP_FE(imagecreatefromxpm, arginfo_imagecreatefromxpm) #endif PHP_FE(imagecreatefromgd, arginfo_imagecreatefromgd) -#ifdef HAVE_GD_GD2 PHP_FE(imagecreatefromgd2, arginfo_imagecreatefromgd2) PHP_FE(imagecreatefromgd2part, arginfo_imagecreatefromgd2part) -#endif #ifdef HAVE_GD_PNG PHP_FE(imagepng, arginfo_imagepng) #endif #ifdef HAVE_GD_WEBP PHP_FE(imagewebp, arginfo_imagewebp) #endif -#ifdef HAVE_GD_GIF_CREATE PHP_FE(imagegif, arginfo_imagegif) -#endif #ifdef HAVE_GD_JPG PHP_FE(imagejpeg, arginfo_imagejpeg) #endif -#ifdef HAVE_GD_WBMP PHP_FE(imagewbmp, arginfo_imagewbmp) -#endif PHP_FE(imagegd, arginfo_imagegd) -#ifdef HAVE_GD_GD2 PHP_FE(imagegd2, arginfo_imagegd2) -#endif PHP_FE(imagedestroy, arginfo_imagedestroy) PHP_FE(imagegammacorrect, arginfo_imagegammacorrect) @@ -1090,7 +1028,7 @@ const zend_function_entry gd_functions[] = { #ifdef ENABLE_GD_TTF PHP_FE(imagettfbbox, arginfo_imagettfbbox) PHP_FE(imagettftext, arginfo_imagettftext) -#if HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX +#if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE PHP_FE(imageftbbox, arginfo_imageftbbox) PHP_FE(imagefttext, arginfo_imagefttext) #endif @@ -1110,19 +1048,15 @@ const zend_function_entry gd_functions[] = { #endif PHP_FE(imagetypes, arginfo_imagetypes) -#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_JPG) PHP_FE(jpeg2wbmp, arginfo_jpeg2wbmp) #endif -#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_PNG) PHP_FE(png2wbmp, arginfo_png2wbmp) #endif -#ifdef HAVE_GD_WBMP PHP_FE(image2wbmp, arginfo_image2wbmp) -#endif -#if HAVE_GD_BUNDLED PHP_FE(imagelayereffect, arginfo_imagelayereffect) PHP_FE(imagexbm, arginfo_imagexbm) -#endif PHP_FE(imagecolormatch, arginfo_imagecolormatch) @@ -1139,13 +1073,13 @@ zend_module_entry gd_module_entry = { "gd", gd_functions, PHP_MINIT(gd), -#if HAVE_LIBT1 || HAVE_GD_FONTMUTEX +#if HAVE_LIBT1 PHP_MSHUTDOWN(gd), #else NULL, #endif NULL, -#if HAVE_GD_STRINGFT && (HAVE_LIBFREETYPE && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE)) +#if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE PHP_RSHUTDOWN(gd), #else NULL, @@ -1187,15 +1121,25 @@ static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC) } /* }}} */ +#ifndef HAVE_GD_BUNDLED +/* {{{ php_gd_error_method + */ +void php_gd_error_method(int type, const char *format, va_list args) +{ + TSRMLS_FETCH(); + + php_verror(NULL, "", type, format, args TSRMLS_CC); +} +/* }}} */ +#endif + /* {{{ PHP_MSHUTDOWN_FUNCTION */ -#if HAVE_LIBT1 || HAVE_GD_FONTMUTEX +#if HAVE_LIBT1 PHP_MSHUTDOWN_FUNCTION(gd) { -#if HAVE_LIBT1 T1_CloseLib(); -#endif -#if HAVE_GD_FONTMUTEX && HAVE_LIBFREETYPE +#if HAVE_GD_BUNDLED && HAVE_LIBFREETYPE gdFontCacheMutexShutdown(); #endif UNREGISTER_INI_ENTRIES(); @@ -1212,7 +1156,7 @@ PHP_MINIT_FUNCTION(gd) le_gd = zend_register_list_destructors_ex(php_free_gd_image, NULL, "gd", module_number); le_gd_font = zend_register_list_destructors_ex(php_free_gd_font, NULL, "gd font", module_number); -#if HAVE_GD_FONTMUTEX && HAVE_LIBFREETYPE +#if HAVE_GD_BUNDLED && HAVE_LIBFREETYPE gdFontCacheMutexSetup(); #endif #if HAVE_LIBT1 @@ -1222,7 +1166,9 @@ PHP_MINIT_FUNCTION(gd) le_ps_font = zend_register_list_destructors_ex(php_free_ps_font, NULL, "gd PS font", module_number); le_ps_enc = zend_register_list_destructors_ex(php_free_ps_enc, NULL, "gd PS encoding", module_number); #endif - +#ifndef HAVE_GD_BUNDLED + gdSetErrorMethod(php_gd_error_method); +#endif REGISTER_INI_ENTRIES(); REGISTER_LONG_CONSTANT("IMG_GIF", 1, CONST_CS | CONST_PERSISTENT); @@ -1231,14 +1177,14 @@ PHP_MINIT_FUNCTION(gd) REGISTER_LONG_CONSTANT("IMG_PNG", 4, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_WBMP", 8, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_XPM", 16, CONST_CS | CONST_PERSISTENT); -#ifdef gdTiled + /* special colours for gd */ REGISTER_LONG_CONSTANT("IMG_COLOR_TILED", gdTiled, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_STYLED", gdStyled, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_BRUSHED", gdBrushed, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_STYLEDBRUSHED", gdStyledBrushed, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_COLOR_TRANSPARENT", gdTransparent, CONST_CS | CONST_PERSISTENT); -#endif + /* for imagefilledarc */ REGISTER_LONG_CONSTANT("IMG_ARC_ROUNDED", gdArc, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_PIE", gdPie, CONST_CS | CONST_PERSISTENT); @@ -1246,24 +1192,16 @@ PHP_MINIT_FUNCTION(gd) REGISTER_LONG_CONSTANT("IMG_ARC_NOFILL", gdNoFill, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_ARC_EDGED", gdEdged, CONST_CS | CONST_PERSISTENT); -/* GD2 image format types */ -#ifdef GD2_FMT_RAW + /* GD2 image format types */ REGISTER_LONG_CONSTANT("IMG_GD2_RAW", GD2_FMT_RAW, CONST_CS | CONST_PERSISTENT); -#endif -#ifdef GD2_FMT_COMPRESSED REGISTER_LONG_CONSTANT("IMG_GD2_COMPRESSED", GD2_FMT_COMPRESSED, CONST_CS | CONST_PERSISTENT); -#endif -#ifdef HAVE_GD_IMAGE_FLIP REGISTER_LONG_CONSTANT("IMG_FLIP_HORIZONTAL", GD_FLIP_HORINZONTAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_FLIP_VERTICAL", GD_FLIP_VERTICAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_FLIP_BOTH", GD_FLIP_BOTH, CONST_CS | CONST_PERSISTENT); -#endif -#if HAVE_GD_BUNDLED REGISTER_LONG_CONSTANT("IMG_EFFECT_REPLACE", gdEffectReplace, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_EFFECT_ALPHABLEND", gdEffectAlphaBlend, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_EFFECT_NORMAL", gdEffectNormal, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_EFFECT_OVERLAY", gdEffectOverlay, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("GD_BUNDLED", 1, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_CROP_DEFAULT", GD_CROP_DEFAULT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_CROP_TRANSPARENT", GD_CROP_TRANSPARENT, CONST_CS | CONST_PERSISTENT); @@ -1301,6 +1239,8 @@ PHP_MINIT_FUNCTION(gd) REGISTER_LONG_CONSTANT("IMG_AFFINE_SHEAR_HORIZONTAL", GD_AFFINE_SHEAR_HORIZONTAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("IMG_AFFINE_SHEAR_VERTICAL", GD_AFFINE_SHEAR_VERTICAL, CONST_CS | CONST_PERSISTENT); +#if defined(HAVE_GD_BUNDLED) + REGISTER_LONG_CONSTANT("GD_BUNDLED", 1, CONST_CS | CONST_PERSISTENT); #else REGISTER_LONG_CONSTANT("GD_BUNDLED", 0, CONST_CS | CONST_PERSISTENT); #endif @@ -1354,27 +1294,19 @@ PHP_MINIT_FUNCTION(gd) /* {{{ PHP_RSHUTDOWN_FUNCTION */ -#if HAVE_GD_STRINGFT && (HAVE_LIBFREETYPE && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE)) +#if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE PHP_RSHUTDOWN_FUNCTION(gd) { -#if HAVE_GD_FONTCACHESHUTDOWN gdFontCacheShutdown(); -#else - gdFreeFontCache(); -#endif return SUCCESS; } #endif /* }}} */ -#if HAVE_GD_BUNDLED +#if defined(HAVE_GD_BUNDLED) #define PHP_GD_VERSION_STRING "bundled (2.1.0 compatible)" #else -# ifdef GD_VERSION_STRING -# define PHP_GD_VERSION_STRING GD_VERSION_STRING -# else -# define PHP_GD_VERSION_STRING "2.0" -# endif +# define PHP_GD_VERSION_STRING GD_VERSION_STRING #endif /* {{{ PHP_MINFO_FUNCTION @@ -1413,20 +1345,13 @@ PHP_MINFO_FUNCTION(gd) php_info_print_table_row(2, "T1Lib Support", "enabled"); #endif -/* this next part is stupid ... if I knew better, I'd put them all on one row (cmv) */ - -#ifdef HAVE_GD_GIF_READ php_info_print_table_row(2, "GIF Read Support", "enabled"); -#endif -#ifdef HAVE_GD_GIF_CREATE php_info_print_table_row(2, "GIF Create Support", "enabled"); -#endif + #ifdef HAVE_GD_JPG { - char tmp[12]; - snprintf(tmp, sizeof(tmp), "%s", gdJpegGetVersionString()); php_info_print_table_row(2, "JPEG Support", "enabled"); - php_info_print_table_row(2, "libJPEG Version", tmp); + php_info_print_table_row(2, "libJPEG Version", gdJpegGetVersionString()); } #endif @@ -1434,10 +1359,8 @@ PHP_MINFO_FUNCTION(gd) php_info_print_table_row(2, "PNG Support", "enabled"); php_info_print_table_row(2, "libPNG Version", gdPngGetVersionString()); #endif -#ifdef HAVE_GD_WBMP php_info_print_table_row(2, "WBMP Support", "enabled"); -#endif -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) php_info_print_table_row(2, "XPM Support", "enabled"); { char tmp[12]; @@ -1445,10 +1368,8 @@ PHP_MINFO_FUNCTION(gd) php_info_print_table_row(2, "libXpm Version", tmp); } #endif -#ifdef HAVE_GD_XBM php_info_print_table_row(2, "XBM Support", "enabled"); -#endif -#if defined(USE_GD_JISX0208) && defined(HAVE_GD_BUNDLED) +#if defined(USE_GD_JISX0208) php_info_print_table_row(2, "JIS-mapped Japanese Font Support", "enabled"); #endif #ifdef HAVE_GD_WEBP @@ -1487,16 +1408,8 @@ PHP_FUNCTION(gd_info) #else add_assoc_bool(return_value, "T1Lib Support", 0); #endif -#ifdef HAVE_GD_GIF_READ add_assoc_bool(return_value, "GIF Read Support", 1); -#else - add_assoc_bool(return_value, "GIF Read Support", 0); -#endif -#ifdef HAVE_GD_GIF_CREATE add_assoc_bool(return_value, "GIF Create Support", 1); -#else - add_assoc_bool(return_value, "GIF Create Support", 0); -#endif #ifdef HAVE_GD_JPG add_assoc_bool(return_value, "JPEG Support", 1); #else @@ -1507,22 +1420,14 @@ PHP_FUNCTION(gd_info) #else add_assoc_bool(return_value, "PNG Support", 0); #endif -#ifdef HAVE_GD_WBMP add_assoc_bool(return_value, "WBMP Support", 1); -#else - add_assoc_bool(return_value, "WBMP Support", 0); -#endif -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) add_assoc_bool(return_value, "XPM Support", 1); #else add_assoc_bool(return_value, "XPM Support", 0); #endif -#ifdef HAVE_GD_XBM add_assoc_bool(return_value, "XBM Support", 1); -#else - add_assoc_bool(return_value, "XBM Support", 0); -#endif -#if defined(USE_GD_JISX0208) && defined(HAVE_GD_BUNDLED) +#if defined(USE_GD_JISX0208) add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 1); #else add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 0); @@ -1537,62 +1442,6 @@ PHP_GD_API int phpi_get_le_gd(void) } /* }}} */ -#ifndef HAVE_GDIMAGECOLORRESOLVE - -/* {{{ gdImageColorResolve - */ -/********************************************************************/ -/* gdImageColorResolve is a replacement for the old fragment: */ -/* */ -/* if ((color=gdImageColorExact(im,R,G,B)) < 0) */ -/* if ((color=gdImageColorAllocate(im,R,G,B)) < 0) */ -/* color=gdImageColorClosest(im,R,G,B); */ -/* */ -/* in a single function */ - -int gdImageColorResolve(gdImagePtr im, int r, int g, int b) -{ - int c; - int ct = -1; - int op = -1; - long rd, gd, bd, dist; - long mindist = 3*255*255; /* init to max poss dist */ - - for (c = 0; c < im->colorsTotal; c++) { - if (im->open[c]) { - op = c; /* Save open slot */ - continue; /* Color not in use */ - } - rd = (long) (im->red [c] - r); - gd = (long) (im->green[c] - g); - bd = (long) (im->blue [c] - b); - dist = rd * rd + gd * gd + bd * bd; - if (dist < mindist) { - if (dist == 0) { - return c; /* Return exact match color */ - } - mindist = dist; - ct = c; - } - } - /* no exact match. We now know closest, but first try to allocate exact */ - if (op == -1) { - op = im->colorsTotal; - if (op == gdMaxColors) { /* No room for more colors */ - return ct; /* Return closest available color */ - } - im->colorsTotal++; - } - im->red [op] = r; - im->green[op] = g; - im->blue [op] = b; - im->open [op] = 0; - return op; /* Return newly allocated color */ -} -/* }}} */ - -#endif - #define FLIPWORD(a) (((a & 0xff000000) >> 24) | ((a & 0x00ff0000) >> 8) | ((a & 0x0000ff00) << 8) | ((a & 0x000000ff) << 24)) /* {{{ proto int imageloadfont(string filename) @@ -1655,13 +1504,9 @@ PHP_FUNCTION(imageloadfont) body_size = font->w * font->h * font->nchars; } - if (overflow2(font->nchars, font->h)) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header"); - efree(font); - php_stream_close(stream); - RETURN_FALSE; - } - if (overflow2(font->nchars * font->h, font->w )) { + if ((font->nchars <= 0 || font->h <= 0 || font->w <= 0 ) || \ + (font->nchars > INT_MAX / font->h) || \ + (font->nchars * font->h > INT_MAX / font->w)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header"); efree(font); php_stream_close(stream); @@ -1984,7 +1829,6 @@ PHP_FUNCTION(imagesavealpha) } /* }}} */ -#if HAVE_GD_BUNDLED /* {{{ proto bool imagelayereffect(resource im, int effect) Set the alpha blending flag to use the bundled libgd layering effects */ PHP_FUNCTION(imagelayereffect) @@ -2003,7 +1847,6 @@ PHP_FUNCTION(imagelayereffect) RETURN_TRUE; } /* }}} */ -#endif /* {{{ proto int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha) Allocate a color with an alpha level. Works for true color and palette based images */ @@ -2288,7 +2131,6 @@ PHP_FUNCTION(imagerotate) } /* }}} */ -#if HAVE_GD_IMAGESETTILE /* {{{ proto bool imagesettile(resource image, resource tile) Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color */ PHP_FUNCTION(imagesettile) @@ -2308,9 +2150,7 @@ PHP_FUNCTION(imagesettile) RETURN_TRUE; } /* }}} */ -#endif -#if HAVE_GD_IMAGESETBRUSH /* {{{ proto bool imagesetbrush(resource image, resource brush) Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color */ PHP_FUNCTION(imagesetbrush) @@ -2330,7 +2170,6 @@ PHP_FUNCTION(imagesetbrush) RETURN_TRUE; } /* }}} */ -#endif /* {{{ proto resource imagecreate(int x_size, int y_size) Create a new image */ @@ -2363,19 +2202,15 @@ PHP_FUNCTION(imagecreate) PHP_FUNCTION(imagetypes) { int ret=0; -#ifdef HAVE_GD_GIF_CREATE ret = 1; -#endif #ifdef HAVE_GD_JPG ret |= 2; #endif #ifdef HAVE_GD_PNG ret |= 4; #endif -#ifdef HAVE_GD_WBMP ret |= 8; -#endif -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) ret |= 16; #endif @@ -2387,13 +2222,31 @@ PHP_FUNCTION(imagetypes) } /* }}} */ +/* {{{ _php_ctx_getmbi + */ + +static int _php_ctx_getmbi(gdIOCtx *ctx) +{ + int i, mbi = 0; + + do { + i = (ctx->getC)(ctx); + if (i < 0) { + return -1; + } + mbi = (mbi << 7) | (i & 0x7f); + } while (i & 0x80); + + return mbi; +} +/* }}} */ + /* {{{ _php_image_type */ static const char php_sig_gd2[3] = {'g', 'd', '2'}; static int _php_image_type (char data[8]) { -#ifdef HAVE_LIBGD15 /* Based on ext/standard/image.c */ if (data == NULL) { @@ -2411,34 +2264,22 @@ static int _php_image_type (char data[8]) } else if (!memcmp(data, php_sig_gif, 3)) { return PHP_GDIMG_TYPE_GIF; } -#ifdef HAVE_GD_WBMP else { gdIOCtx *io_ctx; io_ctx = gdNewDynamicCtxEx(8, data, 0); if (io_ctx) { - if (getmbi((int(*)(void *)) io_ctx->getC, io_ctx) == 0 && skipheader((int(*)(void *)) io_ctx->getC, io_ctx) == 0 ) { -#if HAVE_LIBGD204 + if (_php_ctx_getmbi(io_ctx) == 0 && _php_ctx_getmbi(io_ctx) >= 0) { io_ctx->gd_free(io_ctx); -#else - io_ctx->free(io_ctx); -#endif return PHP_GDIMG_TYPE_WBM; } else { -#if HAVE_LIBGD204 io_ctx->gd_free(io_ctx); -#else - io_ctx->free(io_ctx); -#endif } } } -#endif return -1; -#endif } /* }}} */ -#ifdef HAVE_LIBGD15 /* {{{ _php_image_create_from_string */ gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC) @@ -2455,19 +2296,11 @@ gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioc im = (*ioctx_func_p)(io_ctx); if (!im) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed data is not in '%s' format", tn); -#if HAVE_LIBGD204 io_ctx->gd_free(io_ctx); -#else - io_ctx->free(io_ctx); -#endif return NULL; } -#if HAVE_LIBGD204 io_ctx->gd_free(io_ctx); -#else - io_ctx->free(io_ctx); -#endif return im; } @@ -2516,30 +2349,15 @@ PHP_FUNCTION(imagecreatefromstring) break; case PHP_GDIMG_TYPE_GIF: -#ifdef HAVE_GD_GIF_READ im = _php_image_create_from_string(data, "GIF", gdImageCreateFromGifCtx TSRMLS_CC); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No GIF support in this PHP build"); - RETURN_FALSE; -#endif break; case PHP_GDIMG_TYPE_WBM: -#ifdef HAVE_GD_WBMP im = _php_image_create_from_string(data, "WBMP", gdImageCreateFromWBMPCtx TSRMLS_CC); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No WBMP support in this PHP build"); - RETURN_FALSE; -#endif break; case PHP_GDIMG_TYPE_GD2: -#ifdef HAVE_GD_GD2 im = _php_image_create_from_string(data, "GD2", gdImageCreateFromGd2Ctx TSRMLS_CC); -#else - php_error_docref(NULL TSRMLS_CC, E_WARNING, "No GD2 support in this PHP build"); - RETURN_FALSE; -#endif break; default: @@ -2555,7 +2373,6 @@ PHP_FUNCTION(imagecreatefromstring) ZEND_REGISTER_RESOURCE(return_value, im, le_gd); } /* }}} */ -#endif /* {{{ _php_image_create_from */ @@ -2567,9 +2384,8 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, gdImagePtr im = NULL; php_stream *stream; FILE * fp = NULL; -#ifdef HAVE_GD_JPGEX long ignore_warning; -#endif + if (image_type == PHP_GDIMG_TYPE_GD2PART) { if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sllll", &file, &file_len, &srcx, &srcy, &width, &height) == FAILURE) { return; @@ -2589,9 +2405,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, RETURN_FALSE; } -#ifndef USE_GD_IOCTX ioctx_func_p = NULL; /* don't allow sockets without IOCtx */ -#endif if (image_type == PHP_GDIMG_TYPE_WEBP) { size_t buff_size; @@ -2616,7 +2430,6 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, goto out_err; } } else if (ioctx_func_p) { -#ifdef USE_GD_IOCTX /* we can create an io context */ gdIOCtx* io_ctx; size_t buff_size; @@ -2642,13 +2455,8 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, } else { im = (*ioctx_func_p)(io_ctx); } -#if HAVE_LIBGD204 io_ctx->gd_free(io_ctx); -#else - io_ctx->free(io_ctx); -#endif pefree(buff, 1); -#endif } else { /* try and force the stream to be FILE* */ @@ -2662,7 +2470,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, case PHP_GDIMG_TYPE_GD2PART: im = (*func_p)(fp, srcx, srcy, width, height); break; -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) case PHP_GDIMG_TYPE_XPM: im = gdImageCreateFromXpm(file); break; @@ -2670,12 +2478,8 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, #ifdef HAVE_GD_JPG case PHP_GDIMG_TYPE_JPG: -#ifdef HAVE_GD_JPGEX ignore_warning = INI_INT("gd.jpeg_ignore_warning"); im = gdImageCreateFromJpegEx(fp, ignore_warning); -#else - im = gdImageCreateFromJpeg(fp); -#endif break; #endif @@ -2702,7 +2506,6 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, } /* }}} */ -#ifdef HAVE_GD_GIF_READ /* {{{ proto resource imagecreatefromgif(string filename) Create a new image from GIF file or URL */ PHP_FUNCTION(imagecreatefromgif) @@ -2710,7 +2513,6 @@ PHP_FUNCTION(imagecreatefromgif) _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif, gdImageCreateFromGifCtx); } /* }}} */ -#endif /* HAVE_GD_GIF_READ */ #ifdef HAVE_GD_JPG /* {{{ proto resource imagecreatefromjpeg(string filename) @@ -2742,7 +2544,6 @@ PHP_FUNCTION(imagecreatefromwebp) /* }}} */ #endif /* HAVE_GD_VPX */ -#ifdef HAVE_GD_XBM /* {{{ proto resource imagecreatefromxbm(string filename) Create a new image from XBM file or URL */ PHP_FUNCTION(imagecreatefromxbm) @@ -2750,9 +2551,8 @@ PHP_FUNCTION(imagecreatefromxbm) _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm, NULL); } /* }}} */ -#endif /* HAVE_GD_XBM */ -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) /* {{{ proto resource imagecreatefromxpm(string filename) Create a new image from XPM file or URL */ PHP_FUNCTION(imagecreatefromxpm) @@ -2762,7 +2562,6 @@ PHP_FUNCTION(imagecreatefromxpm) /* }}} */ #endif -#ifdef HAVE_GD_WBMP /* {{{ proto resource imagecreatefromwbmp(string filename) Create a new image from WBMP file or URL */ PHP_FUNCTION(imagecreatefromwbmp) @@ -2770,7 +2569,6 @@ PHP_FUNCTION(imagecreatefromwbmp) _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP, gdImageCreateFromWBMPCtx); } /* }}} */ -#endif /* HAVE_GD_WBMP */ /* {{{ proto resource imagecreatefromgd(string filename) Create a new image from GD file or URL */ @@ -2780,7 +2578,6 @@ PHP_FUNCTION(imagecreatefromgd) } /* }}} */ -#ifdef HAVE_GD_GD2 /* {{{ proto resource imagecreatefromgd2(string filename) Create a new image from GD2 file or URL */ PHP_FUNCTION(imagecreatefromgd2) @@ -2796,7 +2593,6 @@ PHP_FUNCTION(imagecreatefromgd2part) _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2PART, "GD2", gdImageCreateFromGd2Part, gdImageCreateFromGd2PartCtx); } /* }}} */ -#endif /* HAVE_GD_GD2 */ /* {{{ _php_image_output */ @@ -2841,7 +2637,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } switch (image_type) { -#ifdef HAVE_GD_WBMP case PHP_GDIMG_CONVERT_WBM: if (q == -1) { q = 0; @@ -2851,7 +2646,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } gdImageWBMP(im, q, fp); break; -#endif case PHP_GDIMG_TYPE_JPG: (*func_p)(im, fp, q); break; @@ -2867,14 +2661,12 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } (*func_p)(im, fp); break; -#ifdef HAVE_GD_GD2 case PHP_GDIMG_TYPE_GD2: if (q == -1) { q = 128; } (*func_p)(im, fp, q, t); break; -#endif default: if (q == -1) { q = 128; @@ -2897,7 +2689,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } switch (image_type) { -#ifdef HAVE_GD_WBMP case PHP_GDIMG_CONVERT_WBM: if (q == -1) { q = 0; @@ -2907,7 +2698,6 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } gdImageWBMP(im, q, tmp); break; -#endif case PHP_GDIMG_TYPE_JPG: (*func_p)(im, tmp, q); break; @@ -2925,14 +2715,12 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char } (*func_p)(im, tmp); break; -#ifdef HAVE_GD_GD2 case PHP_GDIMG_TYPE_GD2: if (q == -1) { q = 128; } (*func_p)(im, tmp, q, t); break; -#endif default: (*func_p)(im, tmp); break; @@ -2960,15 +2748,12 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char /* {{{ proto int imagexbm(int im, string filename [, int foreground]) Output XBM image to browser or file */ -#if HAVE_GD_BUNDLED PHP_FUNCTION(imagexbm) { _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageXbmCtx); } -#endif /* }}} */ -#ifdef HAVE_GD_GIF_CREATE /* {{{ proto bool imagegif(resource im [, string filename]) Output GIF image to browser or file */ PHP_FUNCTION(imagegif) @@ -2976,7 +2761,6 @@ PHP_FUNCTION(imagegif) _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx); } /* }}} */ -#endif /* HAVE_GD_GIF_CREATE */ #ifdef HAVE_GD_PNG /* {{{ proto bool imagepng(resource im [, string filename]) @@ -3010,7 +2794,6 @@ PHP_FUNCTION(imagejpeg) /* }}} */ #endif /* HAVE_GD_JPG */ -#ifdef HAVE_GD_WBMP /* {{{ proto bool imagewbmp(resource im [, string filename, [, int foreground]]) Output WBMP image to browser or file */ PHP_FUNCTION(imagewbmp) @@ -3018,7 +2801,6 @@ PHP_FUNCTION(imagewbmp) _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx); } /* }}} */ -#endif /* HAVE_GD_WBMP */ /* {{{ proto bool imagegd(resource im [, string filename]) Output GD image to browser or file */ @@ -3028,7 +2810,6 @@ PHP_FUNCTION(imagegd) } /* }}} */ -#ifdef HAVE_GD_GD2 /* {{{ proto bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]]) Output GD2 image to browser or file */ PHP_FUNCTION(imagegd2) @@ -3036,7 +2817,6 @@ PHP_FUNCTION(imagegd2) _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GD2, "GD2", gdImageGd2); } /* }}} */ -#endif /* HAVE_GD_GD2 */ /* {{{ proto bool imagedestroy(resource im) Destroy an image */ @@ -3081,7 +2861,6 @@ PHP_FUNCTION(imagecolorallocate) } /* }}} */ -#if HAVE_LIBGD15 /* {{{ proto void imagepalettecopy(resource dst, resource src) Copy the palette from the src image onto the dst image */ PHP_FUNCTION(imagepalettecopy) @@ -3099,7 +2878,6 @@ PHP_FUNCTION(imagepalettecopy) gdImagePaletteCopy(dst, src); } /* }}} */ -#endif /* {{{ proto int imagecolorat(resource im, int x, int y) Get the index of the color of a pixel */ @@ -3151,7 +2929,6 @@ PHP_FUNCTION(imagecolorclosest) } /* }}} */ -#if HAVE_COLORCLOSESTHWB /* {{{ proto int imagecolorclosesthwb(resource im, int red, int green, int blue) Get the index of the color which has the hue, white and blackness nearest to the given color */ PHP_FUNCTION(imagecolorclosesthwb) @@ -3169,7 +2946,6 @@ PHP_FUNCTION(imagecolorclosesthwb) RETURN_LONG(gdImageColorClosestHWB(im, red, green, blue)); } /* }}} */ -#endif /* {{{ proto bool imagecolordeallocate(resource im, int index) De-allocate a color for an image */ @@ -3891,7 +3667,6 @@ PHP_FUNCTION(imagecopy) } /* }}} */ -#if HAVE_LIBGD15 /* {{{ proto bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct) Merge one part of an image with another */ PHP_FUNCTION(imagecopymerge) @@ -3949,7 +3724,6 @@ PHP_FUNCTION(imagecopymergegray) RETURN_TRUE; } /* }}} */ -#endif /* {{{ proto bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h) Copy and resize part of an image */ @@ -4027,7 +3801,7 @@ PHP_FUNCTION(imagesy) #ifdef ENABLE_GD_TTF -#if HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX +#if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE /* {{{ proto array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo]) Give the bounding box of a text using fonts via freetype2 */ PHP_FUNCTION(imageftbbox) @@ -4043,7 +3817,7 @@ PHP_FUNCTION(imagefttext) php_imagettftext_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, TTFTEXT_DRAW, 1); } /* }}} */ -#endif +#endif /* HAVE_GD_FREETYPE && HAVE_LIBFREETYPE */ /* {{{ proto array imagettfbbox(float size, float angle, string font_file, string text) Give the bounding box of a text using TrueType fonts */ @@ -4073,13 +3847,7 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int char *str = NULL, *fontname = NULL; char *error = NULL; int argc = ZEND_NUM_ARGS(); -#if HAVE_GD_STRINGFTEX gdFTStringExtra strex = {0}; -#endif - -#if !HAVE_GD_STRINGFTEX - assert(!extended); -#endif if (mode == TTFTEXT_BBOX) { if (argc < 4 || argc > ((extended) ? 5 : 4)) { @@ -4099,7 +3867,6 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int /* convert angle to radians */ angle = angle * (M_PI/180); -#if HAVE_GD_STRINGFTEX if (extended && EXT) { /* parse extended info */ HashPosition pos; @@ -4126,7 +3893,6 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int } while (zend_hash_move_forward_ex(HASH_OF(EXT), &pos) == SUCCESS); } -#endif #ifdef VIRTUAL_DIR { @@ -4136,25 +3902,18 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int fontname = NULL; } } -#endif +#endif /* VIRTUAL_DIR */ PHP_GD_CHECK_OPEN_BASEDIR(fontname, "Invalid font filename"); -#ifdef USE_GD_IMGSTRTTF -# if HAVE_GD_STRINGFTEX +#ifdef HAVE_GD_FREETYPE if (extended) { error = gdImageStringFTEx(im, brect, col, fontname, ptsize, angle, x, y, str, &strex); } else -# endif - -# if HAVE_GD_STRINGFT - error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str); -# elif HAVE_GD_STRINGTTF - error = gdImageStringTTF(im, brect, col, fontname, ptsize, angle, x, y, str); -# endif + error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str); -#endif +#endif /* HAVE_GD_FREETYPE */ if (error) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "%s", error); @@ -4625,7 +4384,6 @@ PHP_FUNCTION(imagepsbbox) /* }}} */ #endif -#ifdef HAVE_GD_WBMP /* {{{ proto bool image2wbmp(resource im [, string filename [, int threshold]]) Output WBMP image to browser or file */ PHP_FUNCTION(image2wbmp) @@ -4633,9 +4391,8 @@ PHP_FUNCTION(image2wbmp) _php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_CONVERT_WBM, "WBMP", _php_image_bw_convert); } /* }}} */ -#endif /* HAVE_GD_WBMP */ -#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_JPG) /* {{{ proto bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold) Convert JPEG image to WBMP image */ PHP_FUNCTION(jpeg2wbmp) @@ -4645,7 +4402,7 @@ PHP_FUNCTION(jpeg2wbmp) /* }}} */ #endif -#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP) +#if defined(HAVE_GD_PNG) /* {{{ proto bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold) Convert PNG image to WBMP image */ PHP_FUNCTION(png2wbmp) @@ -4655,7 +4412,6 @@ PHP_FUNCTION(png2wbmp) /* }}} */ #endif -#ifdef HAVE_GD_WBMP /* {{{ _php_image_bw_convert * It converts a gd Image to bw using a threshold value */ static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold) @@ -4702,11 +4458,7 @@ static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold gdImageSetPixel (im_dest, x, y, color); } } -#ifdef USE_GD_IOCTX gdImageWBMPCtx (im_dest, black, out); -#else - gdImageWBMP (im_dest, black, out); -#endif } /* }}} */ @@ -4730,9 +4482,7 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) int int_threshold; int x, y; float x_ratio, y_ratio; -#ifdef HAVE_GD_JPGEX long ignore_warning; -#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "pplll", &f_org, &f_org_len, &f_dest, &f_dest_len, &height, &width, &threshold) == FAILURE) { return; @@ -4771,7 +4521,6 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) } switch (image_type) { -#ifdef HAVE_GD_GIF_READ case PHP_GDIMG_TYPE_GIF: im_org = gdImageCreateFromGif(org); if (im_org == NULL) { @@ -4779,16 +4528,11 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) RETURN_FALSE; } break; -#endif /* HAVE_GD_GIF_READ */ #ifdef HAVE_GD_JPG case PHP_GDIMG_TYPE_JPG: -#ifdef HAVE_GD_JPGEX ignore_warning = INI_INT("gd.jpeg_ignore_warning"); im_org = gdImageCreateFromJpegEx(org, ignore_warning); -#else - im_org = gdImageCreateFromJpeg(org); -#endif if (im_org == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' Not a valid JPEG file", fn_dest); RETURN_FALSE; @@ -4796,7 +4540,6 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) break; #endif /* HAVE_GD_JPG */ - #ifdef HAVE_GD_PNG case PHP_GDIMG_TYPE_PNG: im_org = gdImageCreateFromPng(org); @@ -4897,9 +4640,6 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type ) RETURN_TRUE; } /* }}} */ -#endif /* HAVE_GD_WBMP */ - -#endif /* HAVE_LIBGD */ /* Section Filters */ #define PHP_GD_SINGLE_RES \ @@ -5197,7 +4937,6 @@ PHP_FUNCTION(imageconvolution) /* }}} */ /* End section: Filters */ -#ifdef HAVE_GD_IMAGE_FLIP /* {{{ proto void imageflip(resource im, int mode) Flip an image (in place) horizontally, vertically or both directions. */ PHP_FUNCTION(imageflip) @@ -5233,7 +4972,6 @@ PHP_FUNCTION(imageflip) RETURN_TRUE; } /* }}} */ -#endif #ifdef HAVE_GD_BUNDLED /* {{{ proto bool imageantialias(resource im, bool on) @@ -5253,7 +4991,7 @@ PHP_FUNCTION(imageantialias) RETURN_TRUE; } /* }}} */ - +#endif /* {{{ proto void imagecrop(resource im, array rect) Crop an image using the given coordinates and size, x, y, width and height. */ @@ -5676,8 +5414,6 @@ PHP_FUNCTION(imagesetinterpolation) RETURN_BOOL(gdImageSetInterpolationMethod(im, (gdInterpolationMethod) method)); } /* }}} */ -#endif - /* * Local variables: diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c index b0e8aa66abdea..2a0b500e9eec6 100644 --- a/ext/gd/gd_ctx.c +++ b/ext/gd/gd_ctx.c @@ -189,11 +189,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, break; } -#if HAVE_LIBGD204 ctx->gd_free(ctx); -#else - ctx->free(ctx); -#endif RETURN_TRUE; } diff --git a/ext/gd/gdcache.c b/ext/gd/gdcache.c index 231a1f791ff25..2af6737f7467e 100644 --- a/ext/gd/gdcache.c +++ b/ext/gd/gdcache.c @@ -44,7 +44,7 @@ #else #include #endif -#if HAVE_LIBFREETYPE && !defined(HAVE_GD_CACHE_CREATE) +#if HAVE_LIBFREETYPE && !defined(HAVE_GD_BUNDLED) #include "gdcache.h" diff --git a/ext/gd/libgd/gd_compat.c b/ext/gd/libgd/gd_compat.c deleted file mode 100644 index f3627a1404f2f..0000000000000 --- a/ext/gd/libgd/gd_compat.c +++ /dev/null @@ -1,82 +0,0 @@ -#include "php_config.h" -#ifdef HAVE_GD_PNG -/* needs to be first */ -# include -#endif - -#ifdef HAVE_GD_JPG -# include -#endif - -#ifdef HAVE_GD_JPG -int gdJpegGetVersionInt() -{ - return JPEG_LIB_VERSION; -} - -const char * gdJpegGetVersionString() -{ - switch(JPEG_LIB_VERSION) { - case 62: - return "6b"; - break; - default: - return "unknown"; - } -} -#endif - -#ifdef HAVE_GD_PNG -const char * gdPngGetVersionString() -{ - return PNG_LIBPNG_VER_STRING; -} -#endif - -/* Not exported by libgd, copied from gdhelpers.h */ -int overflow2(int a, int b) -{ - if(a <= 0 || b <= 0) { - return 1; - } - if(a > INT_MAX / b) { - return 1; - } - return 0; -} - -/* Not exported by libgd, copied from wbmp.c */ -int -getmbi (int (*getin) (void *in), void *in) -{ - int i, mbi = 0; - - do - { - i = getin (in); - if (i < 0) - return (-1); - mbi = (mbi << 7) | (i & 0x7f); - } - while (i & 0x80); - - return (mbi); -} - -/* Not exported by libgd, copied from wbmp.c */ -int -skipheader (int (*getin) (void *in), void *in) -{ - int i; - - do - { - i = getin (in); - if (i < 0) - return (-1); - } - while (i & 0x80); - - return (0); -} - diff --git a/ext/gd/libgd/gd_compat.h b/ext/gd/libgd/gd_compat.h deleted file mode 100644 index e8fedf80c5062..0000000000000 --- a/ext/gd/libgd/gd_compat.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef GD_COMPAT_H -#define GD_COMPAT_H 1 - -#if HAVE_GD_BUNDLED -# include "gd.h" -#else -# include -#endif - -const char * gdPngGetVersionString(); -const char * gdJpegGetVersionString(); -int gdJpegGetVersionInt(); -int overflow2(int a, int b); -int getmbi (int (*getin) (void *in), void *in); -int skipheader (int (*getin) (void *in), void *in); - - -/* filters section - * - * Negate the imag src, white becomes black, - * The red, green, and blue intensities of an image are negated. - * White becomes black, yellow becomes blue, etc. - */ -int gdImageNegate(gdImagePtr src); - -/* Convert the image src to a grayscale image */ -int gdImageGrayScale(gdImagePtr src); - -/* Set the brightness level for the image src */ -int gdImageBrightness(gdImagePtr src, int brightness); - -/* Set the contrast level for the image */ -int gdImageContrast(gdImagePtr src, double contrast); - -/* Simply adds or substracts respectively red, green or blue to a pixel */ -int gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha); - -#if !defined(HAVE_GD_IMAGE_CONVOLUTION) -/* Image convolution by a 3x3 custom matrix */ -int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset); -int gdImageEdgeDetectQuick(gdImagePtr src); -int gdImageGaussianBlur(gdImagePtr im); -int gdImageSelectiveBlur( gdImagePtr src); -int gdImageEmboss(gdImagePtr im); -int gdImageMeanRemoval(gdImagePtr im); -int gdImageSmooth(gdImagePtr im, float weight); -#endif - -#if !defined(HAVE_GD_IMAGE_PIXELATE) -enum gdPixelateMode { - GD_PIXELATE_UPPERLEFT, - GD_PIXELATE_AVERAGE -}; - -int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode); -#endif - -int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode); - -#if !HAVE_GD_IMAGEELLIPSE -void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c); -#endif - -gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack, int ignoretransparent); - -int gdImageColorMatch (gdImagePtr im1, gdImagePtr im2); - -#endif - diff --git a/ext/gd/php_gd.h b/ext/gd/php_gd.h index c42ebade13887..c9c9e9de905a8 100644 --- a/ext/gd/php_gd.h +++ b/ext/gd/php_gd.h @@ -22,8 +22,6 @@ #ifndef PHP_GD_H #define PHP_GD_H -#define HAVE_GDIMAGECREATEFROMPNG 1 - #if HAVE_LIBFREETYPE # ifndef ENABLE_GD_TTF # define ENABLE_GD_TTF @@ -69,10 +67,10 @@ extern zend_module_entry gd_module_entry; /* gd.c functions */ PHP_MINFO_FUNCTION(gd); PHP_MINIT_FUNCTION(gd); -#if HAVE_LIBT1 || HAVE_GD_FONTMUTEX +#if HAVE_LIBT1 PHP_MSHUTDOWN_FUNCTION(gd); #endif -#if HAVE_GD_STRINGFT +#if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE PHP_RSHUTDOWN_FUNCTION(gd); #endif @@ -123,12 +121,12 @@ PHP_FUNCTION(imagegrabscreen); PHP_FUNCTION(imagerotate); -#ifdef HAVE_GD_IMAGE_FLIP PHP_FUNCTION(imageflip); -#endif #ifdef HAVE_GD_BUNDLED PHP_FUNCTION(imageantialias); +#endif + PHP_FUNCTION(imagecrop); PHP_FUNCTION(imagecropauto); PHP_FUNCTION(imagescale); @@ -136,7 +134,6 @@ PHP_FUNCTION(imageaffine); PHP_FUNCTION(imageaffinematrixget); PHP_FUNCTION(imageaffinematrixconcat); PHP_FUNCTION(imagesetinterpolation); -#endif PHP_FUNCTION(imagesetthickness); PHP_FUNCTION(imagecopymergegray); @@ -154,7 +151,7 @@ PHP_FUNCTION(imagecreatefromwbmp); PHP_FUNCTION(imagecreatefromgd); PHP_FUNCTION(imagecreatefromgd2); PHP_FUNCTION(imagecreatefromgd2part); -#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) +#if defined(HAVE_GD_XPM) PHP_FUNCTION(imagecreatefromxpm); #endif @@ -205,10 +202,8 @@ PHP_FUNCTION(image2wbmp); PHP_FUNCTION(imagecolormatch); -#if HAVE_GD_BUNDLED PHP_FUNCTION(imagelayereffect); PHP_FUNCTION(imagexbm); -#endif PHP_FUNCTION(imagefilter); PHP_FUNCTION(imageconvolution);