/ext/gd/gd.c
C | 5051 lines | 3747 code | 762 blank | 542 comment | 583 complexity | d6bbacde544a6a10fdc6711b59623ed9 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, LGPL-2.1, BSD-3-Clause
Large files files are truncated, but you can click here to view the full file
- /*
- +----------------------------------------------------------------------+
- | PHP Version 5 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2011 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 3.01 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available through the world-wide-web at the following url: |
- | http://www.php.net/license/3_01.txt |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Rasmus Lerdorf <rasmus@php.net> |
- | Stig Bakken <ssb@php.net> |
- | Jim Winstead <jimw@php.net> |
- +----------------------------------------------------------------------+
- */
- /* $Id: gd.c 306939 2011-01-01 02:19:59Z felipe $ */
- /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
- Cold Spring Harbor Labs. */
- /* Note that there is no code from the gd package in this file */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- #include "php.h"
- #include "php_ini.h"
- #include "ext/standard/head.h"
- #include <math.h>
- #include "SAPI.h"
- #include "php_gd.h"
- #include "ext/standard/info.h"
- #include "php_open_temporary_file.h"
- #if HAVE_SYS_WAIT_H
- # include <sys/wait.h>
- #endif
- #if HAVE_UNISTD_H
- # include <unistd.h>
- #endif
- #ifdef PHP_WIN32
- # include <io.h>
- # include <fcntl.h>
- # include <windows.h>
- # include <Winuser.h>
- # include <Wingdi.h>
- #endif
- #if HAVE_LIBGD
- #if !HAVE_GD_BUNDLED
- # include "libgd/gd_compat.h"
- #endif
- static int le_gd, le_gd_font;
- #if HAVE_LIBT1
- #include <t1lib.h>
- static int le_ps_font, le_ps_enc;
- static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC);
- static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
- #endif
- #include <gd.h>
- #include <gdfontt.h> /* 1 Tiny font */
- #include <gdfonts.h> /* 2 Small font */
- #include <gdfontmb.h> /* 3 Medium bold font */
- #include <gdfontl.h> /* 4 Large font */
- #include <gdfontg.h> /* 5 Giant font */
- #ifdef HAVE_GD_WBMP
- #include "libgd/wbmp.h"
- #endif
- #ifdef ENABLE_GD_TTF
- # ifdef HAVE_LIBFREETYPE
- # include <ft2build.h>
- # include FT_FREETYPE_H
- # endif
- #endif
- #ifndef M_PI
- #define M_PI 3.14159265358979323846
- #endif
- #ifdef ENABLE_GD_TTF
- 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
- * Do not forget to update:
- * IMAGE_FILTER_MAX: define the last filter index
- * IMAGE_FILTER_MAX_ARGS: define the biggest amout of arguments
- * image_filter array in PHP_FUNCTION(imagefilter)
- * */
- #define IMAGE_FILTER_NEGATE 0
- #define IMAGE_FILTER_GRAYSCALE 1
- #define IMAGE_FILTER_BRIGHTNESS 2
- #define IMAGE_FILTER_CONTRAST 3
- #define IMAGE_FILTER_COLORIZE 4
- #define IMAGE_FILTER_EDGEDETECT 5
- #define IMAGE_FILTER_EMBOSS 6
- #define IMAGE_FILTER_GAUSSIAN_BLUR 7
- #define IMAGE_FILTER_SELECTIVE_BLUR 8
- #define IMAGE_FILTER_MEAN_REMOVAL 9
- #define IMAGE_FILTER_SMOOTH 10
- #define IMAGE_FILTER_PIXELATE 11
- #define IMAGE_FILTER_MAX 11
- #define IMAGE_FILTER_MAX_ARGS 6
- static void php_image_filter_negate(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_grayscale(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_brightness(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_contrast(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_colorize(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_edgedetect(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_emboss(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_gaussian_blur(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_selective_blur(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_mean_removal(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS);
- static void php_image_filter_pixelate(INTERNAL_FUNCTION_PARAMETERS);
- /* End Section filters declarations */
- static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
- static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)());
- static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)());
- static int _php_image_type(char data[8]);
- static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type);
- static void _php_image_bw_convert(gdImagePtr im_org, gdIOCtx *out, int threshold);
- /* {{{ arginfo */
- ZEND_BEGIN_ARG_INFO(arginfo_gd_info, 0)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imageloadfont, 0)
- ZEND_ARG_INFO(0, filename)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesetstyle, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, styles) /* ARRAY_INFO(0, styles, 0) */
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecreatetruecolor, 0)
- ZEND_ARG_INFO(0, x_size)
- ZEND_ARG_INFO(0, y_size)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imageistruecolor, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagetruecolortopalette, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, ditherFlag)
- ZEND_ARG_INFO(0, colorsWanted)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolormatch, 0)
- ZEND_ARG_INFO(0, im1)
- ZEND_ARG_INFO(0, im2)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesetthickness, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, thickness)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefilledellipse, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, cx)
- ZEND_ARG_INFO(0, cy)
- ZEND_ARG_INFO(0, w)
- ZEND_ARG_INFO(0, h)
- ZEND_ARG_INFO(0, color)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefilledarc, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, cx)
- ZEND_ARG_INFO(0, cy)
- ZEND_ARG_INFO(0, w)
- ZEND_ARG_INFO(0, h)
- ZEND_ARG_INFO(0, s)
- ZEND_ARG_INFO(0, e)
- ZEND_ARG_INFO(0, col)
- ZEND_ARG_INFO(0, style)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagealphablending, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, blend)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesavealpha, 0)
- ZEND_ARG_INFO(0, im)
- 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)
- ZEND_ARG_INFO(0, red)
- ZEND_ARG_INFO(0, green)
- ZEND_ARG_INFO(0, blue)
- ZEND_ARG_INFO(0, alpha)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorresolvealpha, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, red)
- ZEND_ARG_INFO(0, green)
- ZEND_ARG_INFO(0, blue)
- ZEND_ARG_INFO(0, alpha)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorclosestalpha, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, red)
- ZEND_ARG_INFO(0, green)
- ZEND_ARG_INFO(0, blue)
- ZEND_ARG_INFO(0, alpha)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorexactalpha, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, red)
- ZEND_ARG_INFO(0, green)
- ZEND_ARG_INFO(0, blue)
- ZEND_ARG_INFO(0, alpha)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecopyresampled, 0)
- ZEND_ARG_INFO(0, dst_im)
- ZEND_ARG_INFO(0, src_im)
- ZEND_ARG_INFO(0, dst_x)
- ZEND_ARG_INFO(0, dst_y)
- ZEND_ARG_INFO(0, src_x)
- ZEND_ARG_INFO(0, src_y)
- ZEND_ARG_INFO(0, dst_w)
- ZEND_ARG_INFO(0, dst_h)
- ZEND_ARG_INFO(0, src_w)
- ZEND_ARG_INFO(0, src_h)
- ZEND_END_ARG_INFO()
- #ifdef PHP_WIN32
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagegrabwindow, 0, 0, 1)
- ZEND_ARG_INFO(0, handle)
- ZEND_ARG_INFO(0, client_area)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagegrabscreen, 0)
- ZEND_END_ARG_INFO()
- #endif
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagerotate, 0, 0, 3)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, bgdcolor)
- 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)
- ZEND_ARG_INFO(0, y_size)
- 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)
- ZEND_ARG_INFO(0, filename)
- ZEND_END_ARG_INFO()
- #endif
- #ifdef HAVE_GD_PNG
- ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefrompng, 0)
- ZEND_ARG_INFO(0, filename)
- 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)
- 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()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromgd2part, 0)
- ZEND_ARG_INFO(0, filename)
- ZEND_ARG_INFO(0, srcX)
- ZEND_ARG_INFO(0, srcY)
- 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)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, filename)
- ZEND_END_ARG_INFO()
- #endif
- #ifdef HAVE_GD_JPG
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagejpeg, 0, 0, 1)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, filename)
- ZEND_ARG_INFO(0, quality)
- 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)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorallocate, 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()
- #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)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorclosest, 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()
- #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)
- ZEND_ARG_INFO(0, index)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorresolve, 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()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorexact, 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()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorset, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, color)
- ZEND_ARG_INFO(0, red)
- ZEND_ARG_INFO(0, green)
- ZEND_ARG_INFO(0, blue)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorsforindex, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, index)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagegammacorrect, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, inputgamma)
- ZEND_ARG_INFO(0, outputgamma)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesetpixel, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imageline, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x1)
- ZEND_ARG_INFO(0, y1)
- ZEND_ARG_INFO(0, x2)
- ZEND_ARG_INFO(0, y2)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagedashedline, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x1)
- ZEND_ARG_INFO(0, y1)
- ZEND_ARG_INFO(0, x2)
- ZEND_ARG_INFO(0, y2)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagerectangle, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x1)
- ZEND_ARG_INFO(0, y1)
- ZEND_ARG_INFO(0, x2)
- ZEND_ARG_INFO(0, y2)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefilledrectangle, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x1)
- ZEND_ARG_INFO(0, y1)
- ZEND_ARG_INFO(0, x2)
- ZEND_ARG_INFO(0, y2)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagearc, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, cx)
- ZEND_ARG_INFO(0, cy)
- ZEND_ARG_INFO(0, w)
- ZEND_ARG_INFO(0, h)
- ZEND_ARG_INFO(0, s)
- ZEND_ARG_INFO(0, e)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imageellipse, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, cx)
- ZEND_ARG_INFO(0, cy)
- ZEND_ARG_INFO(0, w)
- ZEND_ARG_INFO(0, h)
- ZEND_ARG_INFO(0, color)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefilltoborder, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, border)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefill, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecolorstotal, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagecolortransparent, 0, 0, 1)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imageinterlace, 0, 0, 1)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, interlace)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagepolygon, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, points) /* ARRAY_INFO(0, points, 0) */
- ZEND_ARG_INFO(0, num_pos)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefilledpolygon, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, points) /* ARRAY_INFO(0, points, 0) */
- ZEND_ARG_INFO(0, num_pos)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefontwidth, 0)
- ZEND_ARG_INFO(0, font)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagefontheight, 0)
- ZEND_ARG_INFO(0, font)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagechar, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, c)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecharup, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, c)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagestring, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, str)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagestringup, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, str)
- ZEND_ARG_INFO(0, col)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecopy, 0)
- ZEND_ARG_INFO(0, dst_im)
- ZEND_ARG_INFO(0, src_im)
- ZEND_ARG_INFO(0, dst_x)
- ZEND_ARG_INFO(0, dst_y)
- ZEND_ARG_INFO(0, src_x)
- ZEND_ARG_INFO(0, src_y)
- ZEND_ARG_INFO(0, src_w)
- 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)
- ZEND_ARG_INFO(0, dst_x)
- ZEND_ARG_INFO(0, dst_y)
- ZEND_ARG_INFO(0, src_x)
- ZEND_ARG_INFO(0, src_y)
- ZEND_ARG_INFO(0, src_w)
- ZEND_ARG_INFO(0, src_h)
- ZEND_ARG_INFO(0, pct)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagecopymergegray, 0)
- ZEND_ARG_INFO(0, src_im)
- ZEND_ARG_INFO(0, dst_im)
- ZEND_ARG_INFO(0, dst_x)
- ZEND_ARG_INFO(0, dst_y)
- ZEND_ARG_INFO(0, src_x)
- ZEND_ARG_INFO(0, src_y)
- ZEND_ARG_INFO(0, src_w)
- 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)
- ZEND_ARG_INFO(0, src_im)
- ZEND_ARG_INFO(0, dst_x)
- ZEND_ARG_INFO(0, dst_y)
- ZEND_ARG_INFO(0, src_x)
- ZEND_ARG_INFO(0, src_y)
- ZEND_ARG_INFO(0, dst_w)
- ZEND_ARG_INFO(0, dst_h)
- ZEND_ARG_INFO(0, src_w)
- ZEND_ARG_INFO(0, src_h)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesx, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagesy, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_END_ARG_INFO()
- #ifdef ENABLE_GD_TTF
- #if HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imageftbbox, 0, 0, 4)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, font_file)
- ZEND_ARG_INFO(0, text)
- ZEND_ARG_INFO(0, extrainfo) /* ARRAY_INFO(0, extrainfo, 0) */
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagefttext, 0, 0, 8)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, col)
- ZEND_ARG_INFO(0, font_file)
- ZEND_ARG_INFO(0, text)
- ZEND_ARG_INFO(0, extrainfo) /* ARRAY_INFO(0, extrainfo, 0) */
- ZEND_END_ARG_INFO()
- #endif
- ZEND_BEGIN_ARG_INFO(arginfo_imagettfbbox, 0)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, font_file)
- ZEND_ARG_INFO(0, text)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagettftext, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, x)
- ZEND_ARG_INFO(0, y)
- ZEND_ARG_INFO(0, col)
- ZEND_ARG_INFO(0, font_file)
- ZEND_ARG_INFO(0, text)
- ZEND_END_ARG_INFO()
- #endif
- #ifdef HAVE_LIBT1
- ZEND_BEGIN_ARG_INFO(arginfo_imagepsloadfont, 0)
- ZEND_ARG_INFO(0, pathname)
- ZEND_END_ARG_INFO()
- /*
- ZEND_BEGIN_ARG_INFO(arginfo_imagepscopyfont, 0)
- ZEND_ARG_INFO(0, font_index)
- ZEND_END_ARG_INFO()
- */
- ZEND_BEGIN_ARG_INFO(arginfo_imagepsfreefont, 0)
- ZEND_ARG_INFO(0, font_index)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagepsencodefont, 0)
- ZEND_ARG_INFO(0, font_index)
- ZEND_ARG_INFO(0, filename)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagepsextendfont, 0)
- ZEND_ARG_INFO(0, font_index)
- ZEND_ARG_INFO(0, extend)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imagepsslantfont, 0)
- ZEND_ARG_INFO(0, font_index)
- ZEND_ARG_INFO(0, slant)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepstext, 0, 0, 8)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, text)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, foreground)
- ZEND_ARG_INFO(0, background)
- ZEND_ARG_INFO(0, xcoord)
- ZEND_ARG_INFO(0, ycoord)
- ZEND_ARG_INFO(0, space)
- ZEND_ARG_INFO(0, tightness)
- ZEND_ARG_INFO(0, angle)
- ZEND_ARG_INFO(0, antialias)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepsbbox, 0, 0, 3)
- ZEND_ARG_INFO(0, text)
- ZEND_ARG_INFO(0, font)
- ZEND_ARG_INFO(0, size)
- ZEND_ARG_INFO(0, space)
- ZEND_ARG_INFO(0, tightness)
- ZEND_ARG_INFO(0, angle)
- 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)
- ZEND_BEGIN_ARG_INFO(arginfo_jpeg2wbmp, 0)
- ZEND_ARG_INFO(0, f_org)
- ZEND_ARG_INFO(0, f_dest)
- ZEND_ARG_INFO(0, d_height)
- ZEND_ARG_INFO(0, d_width)
- ZEND_ARG_INFO(0, d_threshold)
- ZEND_END_ARG_INFO()
- #endif
- #if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)
- ZEND_BEGIN_ARG_INFO(arginfo_png2wbmp, 0)
- ZEND_ARG_INFO(0, f_org)
- ZEND_ARG_INFO(0, f_dest)
- ZEND_ARG_INFO(0, d_height)
- ZEND_ARG_INFO(0, d_width)
- ZEND_ARG_INFO(0, d_threshold)
- ZEND_END_ARG_INFO()
- #endif
- ZEND_BEGIN_ARG_INFO_EX(arginfo_imagefilter, 0, 0, 2)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, filtertype)
- ZEND_ARG_INFO(0, arg1)
- ZEND_ARG_INFO(0, arg2)
- ZEND_ARG_INFO(0, arg3)
- ZEND_ARG_INFO(0, arg4)
- ZEND_END_ARG_INFO()
- ZEND_BEGIN_ARG_INFO(arginfo_imageconvolution, 0)
- ZEND_ARG_INFO(0, im)
- ZEND_ARG_INFO(0, matrix3x3) /* ARRAY_INFO(0, matrix3x3, 0) */
- ZEND_ARG_INFO(0, div)
- ZEND_ARG_INFO(0, offset)
- ZEND_END_ARG_INFO()
- #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
- /* }}} */
- /* {{{ gd_functions[]
- */
- const zend_function_entry gd_functions[] = {
- PHP_FE(gd_info, arginfo_gd_info)
- PHP_FE(imagearc, arginfo_imagearc)
- PHP_FE(imageellipse, arginfo_imageellipse)
- PHP_FE(imagechar, arginfo_imagechar)
- 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)
- PHP_FE(imagecolorset, arginfo_imagecolorset)
- PHP_FE(imagecolortransparent, arginfo_imagecolortransparent)
- 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)
- PHP_FE(imageistruecolor, arginfo_imageistruecolor)
- PHP_FE(imagetruecolortopalette, arginfo_imagetruecolortopalette)
- PHP_FE(imagesetthickness, arginfo_imagesetthickness)
- PHP_FE(imagefilledarc, arginfo_imagefilledarc)
- PHP_FE(imagefilledellipse, arginfo_imagefilledellipse)
- PHP_FE(imagealphablending, arginfo_imagealphablending)
- PHP_FE(imagesavealpha, arginfo_imagesavealpha)
- PHP_FE(imagecolorallocatealpha, arginfo_imagecolorallocatealpha)
- PHP_FE(imagecolorresolvealpha, arginfo_imagecolorresolvealpha)
- PHP_FE(imagecolorclosestalpha, arginfo_imagecolorclosestalpha)
- PHP_FE(imagecolorexactalpha, arginfo_imagecolorexactalpha)
- PHP_FE(imagecopyresampled, arginfo_imagecopyresampled)
- #ifdef PHP_WIN32
- PHP_FE(imagegrabwindow, arginfo_imagegrabwindow)
- PHP_FE(imagegrabscreen, arginfo_imagegrabscreen)
- #endif
- PHP_FE(imagerotate, arginfo_imagerotate)
- #ifdef HAVE_GD_BUNDLED
- PHP_FE(imageantialias, arginfo_imageantialias)
- #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
- PHP_FE(imagecreatefrompng, arginfo_imagecreatefrompng)
- #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)
- 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_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)
- PHP_FE(imagefill, arginfo_imagefill)
- PHP_FE(imagefilledpolygon, arginfo_imagefilledpolygon)
- PHP_FE(imagefilledrectangle, arginfo_imagefilledrectangle)
- PHP_FE(imagefilltoborder, arginfo_imagefilltoborder)
- PHP_FE(imagefontwidth, arginfo_imagefontwidth)
- PHP_FE(imagefontheight, arginfo_imagefontheight)
- PHP_FE(imageinterlace, arginfo_imageinterlace)
- PHP_FE(imageline, arginfo_imageline)
- PHP_FE(imageloadfont, arginfo_imageloadfont)
- PHP_FE(imagepolygon, arginfo_imagepolygon)
- PHP_FE(imagerectangle, arginfo_imagerectangle)
- PHP_FE(imagesetpixel, arginfo_imagesetpixel)
- PHP_FE(imagestring, arginfo_imagestring)
- PHP_FE(imagestringup, arginfo_imagestringup)
- PHP_FE(imagesx, arginfo_imagesx)
- PHP_FE(imagesy, arginfo_imagesy)
- PHP_FE(imagedashedline, arginfo_imagedashedline)
- #ifdef ENABLE_GD_TTF
- PHP_FE(imagettfbbox, arginfo_imagettfbbox)
- PHP_FE(imagettftext, arginfo_imagettftext)
- #if HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX
- PHP_FE(imageftbbox, arginfo_imageftbbox)
- PHP_FE(imagefttext, arginfo_imagefttext)
- #endif
- #endif
- #ifdef HAVE_LIBT1
- PHP_FE(imagepsloadfont, arginfo_imagepsloadfont)
- /*
- PHP_FE(imagepscopyfont, arginfo_imagepscopyfont)
- */
- PHP_FE(imagepsfreefont, arginfo_imagepsfreefont)
- PHP_FE(imagepsencodefont, arginfo_imagepsencodefont)
- PHP_FE(imagepsextendfont, arginfo_imagepsextendfont)
- PHP_FE(imagepsslantfont, arginfo_imagepsslantfont)
- PHP_FE(imagepstext, arginfo_imagepstext)
- PHP_FE(imagepsbbox, arginfo_imagepsbbox)
- #endif
- PHP_FE(imagetypes, arginfo_imagetypes)
- #if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP)
- PHP_FE(jpeg2wbmp, arginfo_jpeg2wbmp)
- #endif
- #if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)
- 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)
- /* gd filters */
- PHP_FE(imagefilter, arginfo_imagefilter)
- PHP_FE(imageconvolution, arginfo_imageconvolution)
- {NULL, NULL, NULL}
- };
- /* }}} */
- zend_module_entry gd_module_entry = {
- STANDARD_MODULE_HEADER,
- "gd",
- gd_functions,
- PHP_MINIT(gd),
- #if HAVE_LIBT1 || HAVE_GD_FONTMUTEX
- PHP_MSHUTDOWN(gd),
- #else
- NULL,
- #endif
- NULL,
- #if HAVE_GD_STRINGFT && (HAVE_LIBFREETYPE && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE))
- PHP_RSHUTDOWN(gd),
- #else
- NULL,
- #endif
- PHP_MINFO(gd),
- NO_VERSION_YET,
- STANDARD_MODULE_PROPERTIES
- };
- #ifdef COMPILE_DL_GD
- ZEND_GET_MODULE(gd)
- #endif
- /* {{{ PHP_INI_BEGIN */
- PHP_INI_BEGIN()
- PHP_INI_ENTRY("gd.jpeg_ignore_warning", "0", PHP_INI_ALL, NULL)
- PHP_INI_END()
- /* }}} */
- /* {{{ php_free_gd_image
- */
- static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC)
- {
- gdImageDestroy((gdImagePtr) rsrc->ptr);
- }
- /* }}} */
- /* {{{ php_free_gd_font
- */
- static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
- {
- gdFontPtr fp = (gdFontPtr) rsrc->ptr;
- if (fp->data) {
- efree(fp->data);
- }
- efree(fp);
- }
- /* }}} */
- /* {{{ PHP_MSHUTDOWN_FUNCTION
- */
- #if HAVE_LIBT1 || HAVE_GD_FONTMUTEX
- PHP_MSHUTDOWN_FUNCTION(gd)
- {
- #if HAVE_LIBT1
- T1_CloseLib();
- #endif
- #if HAVE_GD_FONTMUTEX && HAVE_LIBFREETYPE
- gdFontCacheMutexShutdown();
- #endif
- UNREGISTER_INI_ENTRIES();
- return SUCCESS;
- }
- #endif
- /* }}} */
- /* {{{ PHP_MINIT_FUNCTION
- */
- 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
- gdFontCacheMutexSetup();
- #endif
- #if HAVE_LIBT1
- T1_SetBitmapPad(8);
- T1_InitLib(NO_LOGFILE | IGNORE_CONFIGFILE | IGNORE_FONTDATABASE);
- T1_SetLogLevel(T1LOG_DEBUG);
- 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
- REGISTER_INI_ENTRIES();
- REGISTER_LONG_CONSTANT("IMG_GIF", 1, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPG", 2, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_JPEG", 2, CONST_CS | CONST_PERSISTENT);
- 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);
- REGISTER_LONG_CONSTANT("IMG_ARC_CHORD", gdChord, CONST_CS | CONST_PERSISTENT);
- 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
- 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
- #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);
- #else
- REGISTER_LONG_CONSTANT("GD_BUNDLED", 0, CONST_CS | CONST_PERSISTENT);
- #endif
- /* Section Filters */
- REGISTER_LONG_CONSTANT("IMG_FILTER_NEGATE", IMAGE_FILTER_NEGATE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_GRAYSCALE", IMAGE_FILTER_GRAYSCALE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_BRIGHTNESS", IMAGE_FILTER_BRIGHTNESS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_CONTRAST", IMAGE_FILTER_CONTRAST, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_COLORIZE", IMAGE_FILTER_COLORIZE, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_EDGEDETECT", IMAGE_FILTER_EDGEDETECT, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_GAUSSIAN_BLUR", IMAGE_FILTER_GAUSSIAN_BLUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_SELECTIVE_BLUR", IMAGE_FILTER_SELECTIVE_BLUR, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_EMBOSS", IMAGE_FILTER_EMBOSS, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_MEAN_REMOVAL", IMAGE_FILTER_MEAN_REMOVAL, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_SMOOTH", IMAGE_FILTER_SMOOTH, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("IMG_FILTER_PIXELATE", IMAGE_FILTER_PIXELATE, CONST_CS | CONST_PERSISTENT);
- /* End Section Filters */
- #ifdef GD_VERSION_STRING
- REGISTER_STRING_CONSTANT("GD_VERSION", GD_VERSION_STRING, CONST_CS | CONST_PERSISTENT);
- #endif
- #if defined(GD_MAJOR_VERSION) && defined(GD_MINOR_VERSION) && defined(GD_RELEASE_VERSION) && defined(GD_EXTRA_VERSION)
- REGISTER_LONG_CONSTANT("GD_MAJOR_VERSION", GD_MAJOR_VERSION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GD_MINOR_VERSION", GD_MINOR_VERSION, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("GD_RELEASE_VERSION", GD_RELEASE_VERSION, CONST_CS | CONST_PERSISTENT);
- REGISTER_STRING_CONSTANT("GD_EXTRA_VERSION", GD_EXTRA_VERSION, CONST_CS | CONST_PERSISTENT);
- #endif
- #ifdef HAVE_GD_PNG
- /*
- * cannot include #include "png.h"
- * /usr/include/pngconf.h:310:2: error: #error png.h already includes setjmp.h with some additional fixup.
- * as error, use the values for now...
- */
- REGISTER_LONG_CONSTANT("PNG_NO_FILTER", 0x00, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_FILTER_NONE", 0x08, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_FILTER_SUB", 0x10, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_FILTER_UP", 0x20, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_FILTER_AVG", 0x40, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_FILTER_PAETH", 0x80, CONST_CS | CONST_PERSISTENT);
- REGISTER_LONG_CONSTANT("PNG_ALL_FILTERS", 0x08 | 0x10 | 0x20 | 0x40 | 0x80, CONST_CS | CONST_PERSISTENT);
- #endif
- return SUCCESS;
- }
- /* }}} */
- /* {{{ PHP_RSHUTDOWN_FUNCTION
- */
- #if HAVE_GD_STRINGFT && (HAVE_LIBFREETYPE && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE))
- PHP_RSHUTDOWN_FUNCTION(gd)
- {
- #if HAVE_GD_FONTCACHESHUTDOWN
- gdFontCacheShutdown();
- #else
- gdFreeFontCache();
- #endif
- return SUCCESS;
- }
- #endif
- /* }}} */
- #if HAVE_GD_BUNDLED
- #define PHP_GD_VERSION_STRING "bundled (2.0.34 compatible)"
- #else
- #define PHP_GD_VERSION_STRING "2.0"
- #endif
- /* {{{ PHP_MINFO_FUNCTION
- */
- PHP_MINFO_FUNCTION(gd)
- {
- php_info_print_table_start();
- php_info_print_table_row(2, "GD Support", "enabled");
- /* need to use a PHPAPI function here because it is external module in windows */
- php_info_print_table_row(2, "GD Version", PHP_GD_VERSION_STRING);
- #ifdef ENABLE_GD_TTF
- php_info_print_table_row(2, "FreeType Support", "enabled");
- #if HAVE_LIBFREETYPE
- php_info_print_table_row(2, "FreeType Linkage", "with freetype");
- {
- char tmp[256];
- #ifdef FREETYPE_PATCH
- snprintf(tmp, sizeof(tmp), "%d.%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR, FREETYPE_PATCH);
- #elif defined(FREETYPE_MAJOR)
- snprintf(tmp, sizeof(tmp), "%d.%d", FREETYPE_MAJOR, FREETYPE_MINOR);
- #else
- snprintf(tmp, sizeof(tmp), "1.x");
- #endif
- php_info_print_table_row(2, "FreeType Version", tmp);
- }
- #else
- php_info_print_table_row(2, "FreeType Linkage", "with unknown library");
- #endif
- #endif
- #ifdef HAVE_LIBT1
- 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);
- }
- #endif
- #ifdef HAVE_GD_PNG
- 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)
- php_info_print_table_row(2, "XPM Support", "enabled");
- #endif
- #ifdef HAVE_GD_XBM
- php_info_print_table_row(2, "XBM Support", "enabled");
- #endif
- #if defined(USE_GD_JISX0208) && defined(HAVE_GD_BUNDLED)
- php_info_print_table_row(2, "JIS-mapped Japanese Font Support", "enabled");
- #endif
- php_info_print_table_end();
- DISPLAY_INI_ENTRIES();
- }
- /* }}} */
- /* {{{ proto array gd_info()
- */
- PHP_FUNCTION(gd_info)
- {
- if (zend_parse_parameters_none() == FAILURE) {
- RETURN_FALSE;
- }
- array_init(return_value);
- add_assoc_string(return_value, "GD Version", PHP_GD_VERSION_STRING, 1);
- #ifdef ENABLE_GD_TTF
- add_assoc_bool(return_value, "FreeType Support", 1);
- #if HAVE_LIBFREETYPE
- add_assoc_string(return_value, "FreeType Linkage", "with freetype", 1);
- #else
- add_assoc_string(return_value, "FreeType Linkage", "with unknown library", 1);
- #endif
- #else
- add_assoc_bool(return_value, "FreeType Support", 0);
- #endif
- #ifdef HAVE_LIBT1
- add_assoc_bool(return_value, "T1Lib Support", 1);
- #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
- add_assoc_bool(return_value, "JPEG Support", 0);
- #endif
- #ifdef HAVE_GD_PNG
- add_assoc_bool(return_value, "PNG Support", 1);
- #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)
- 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)
- add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 1);
- #else
- add_assoc_bool(return_value, "JIS-mapped Japanese Font Support", 0);
- #endif
- }
- /* }}} */
- /* Need this for cpdf. See also comment in file.c php3i_get_le_fp() */
- PHP_GD_API int phpi_get_le_gd(void)
- {
- return le_gd;
- }
- /* }}} */
- #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)
- Load a new font */
- PHP_FUNCTION(imageloadfont)
- {
- char *file;
- int file_name, hdr_size = sizeof(gdFont) - sizeof(char *);
- int ind, body_size, n = 0, b, i, body_size_check;
- gdFontPtr font;
- php_stream *stream;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &file, &file_name) == FAILURE) {
- return;
- }
- stream = php_stream_open_wrapper(file, "rb", ENFORCE_SAFE_MODE | IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL);
- if (stream == NULL) {
- RETURN_FALSE;
- }
- /* Only supports a architecture-dependent binary dump format
- * at the moment.
- * The file format is like this on machines with 32-byte integers:
- *
- * byte 0-3: (int) number of characters in the font
- * byte 4-7: (int) value of first character in the font (often 32, space)
- * byte 8-11: (int) pixel width of each character
- * byte 12-15: (int) pixel height of each character
- * bytes 16-: (char) array with character data, one byte per pixel
- * in each character, for a total of
- * (nchars*width*height) bytes.
- */
- font = (gdFontPtr) emalloc(sizeof(gdFont));
- b = 0;
- while (b < hdr_size && (n = php_stream_read(stream, (char*)&font[b], hdr_size - b))) {
- b += n;
- }
- if (!n) {
- efree(font);
- if (php_stream_eof(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "End of file while reading header");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading header");
- }
- php_stream_close(stream);
- RETURN_FALSE;
- }
- i = php_stream_tell(stream);
- php_stream_seek(stream, 0, SEEK_END);
- body_size_check = php_stream_tell(stream) - hdr_size;
- php_stream_seek(stream, i, SEEK_SET);
- body_size = font->w * font->h * font->nchars;
- if (body_size != body_size_check) {
- font->w = FLIPWORD(font->w);
- font->h = FLIPWORD(font->h);
- font->nchars = FLIPWORD(font->nchars);
- 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 )) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font, invalid font header");
- efree(font);
- php_stream_close(stream);
- RETURN_FALSE;
- }
- if (body_size != body_size_check) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error reading font");
- efree(font);
- php_stream_close(stream);
- RETURN_FALSE;
- }
- font->data = emalloc(body_size);
- b = 0;
- while (b < body_size && (n = php_stream_read(stream, &font->data[b], body_size - b))) {
- b += n;
- }
- if (!n) {
- efree(font->data);
- efree(font);
- if (php_stream_eof(stream)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "End of file while reading body");
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error while reading body");
- }
- php_stream_close(stream);
- RETURN_FALSE;
- }
- php_stream_close(stream);
- /* Adding 5 to the font index so we will never have font indices
- * that overlap with the old fonts (with indices 1-5). The first
- * list index given out is always 1.
- */
- ind = 5 + zend_list_insert(font, le_gd_font);
- RETURN_LONG(ind);
- }
- /* }}} */
- /* {{{ proto bool imagesetstyle(resource im, array styles)
- Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */
- PHP_FUNCTION(imagesetstyle)
- {
- zval *IM, *styles;
- gdImagePtr im;
- int * stylearr;
- int index;
- HashPosition pos;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &IM, &styles) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- /* copy the style values in the stylearr */
- stylearr = safe_emalloc(sizeof(int), zend_hash_num_elements(HASH_OF(styles)), 0);
- zend_hash_internal_pointer_reset_ex(HASH_OF(styles), &pos);
- for (index = 0;; zend_hash_move_forward_ex(HASH_OF(styles), &pos)) {
- zval ** item;
- if (zend_hash_get_current_data_ex(HASH_OF(styles), (void **) &item, &pos) == FAILURE) {
- break;
- }
- convert_to_long_ex(item);
- stylearr[index++] = Z_LVAL_PP(item);
- }
- gdImageSetStyle(im, stylearr, index);
- efree(stylearr);
- RETURN_TRUE;
- }
- /* }}} */
- /* {{{ proto resource imagecreatetruecolor(int x_size, int y_size)
- Create a new true color image */
- PHP_FUNCTION(imagecreatetruecolor)
- {
- long x_size, y_size;
- gdImagePtr im;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &x_size, &y_size) == FAILURE) {
- return;
- }
- if (x_size <= 0 || y_size <= 0 || x_size >= INT_MAX || y_size >= INT_MAX) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid image dimensions");
- RETURN_FALSE;
- }
- im = gdImageCreateTrueColor(x_size, y_size);
- if (!im) {
- RETURN_FALSE;
- }
- ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
- }
- /* }}} */
- /* {{{ proto bool imageistruecolor(resource im)
- return true if the image uses truecolor */
- PHP_FUNCTION(imageistruecolor)
- {
- zval *IM;
- gdImagePtr im;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &IM) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- RETURN_BOOL(im->trueColor);
- }
- /* }}} */
- /* {{{ proto void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)
- Convert a true colour image to a palette based image with a number of colours, optionally using dithering. */
- PHP_FUNCTION(imagetruecolortopalette)
- {
- zval *IM;
- zend_bool dither;
- long ncolors;
- gdImagePtr im;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rbl", &IM, &dither, &ncolors) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- if (ncolors <= 0) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of colors has to be greater than zero");
- RETURN_FALSE;
- }
- gdImageTrueColorToPalette(im, dither, ncolors);
- RETURN_TRUE;
- }
- /* }}} */
- /* {{{ proto bool imagecolormatch(resource im1, resource im2)
- Makes the colors of the palette version of an image more closely match the true color version */
- PHP_FUNCTION(imagecolormatch)
- {
- zval *IM1, *IM2;
- gdImagePtr im1, im2;
- int result;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rr", &IM1, &IM2) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im1, gdImagePtr, &IM1, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im2, gdImagePtr, &IM2, -1, "Image", le_gd);
- result = gdImageColorMatch(im1, im2);
- switch (result) {
- case -1:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Image1 must be TrueColor" );
- RETURN_FALSE;
- break;
- case -2:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Image2 must be Palette" );
- RETURN_FALSE;
- break;
- case -3:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Image1 and Image2 must be the same size" );
- RETURN_FALSE;
- break;
- case -4:
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Image2 must have at least one color" );
- RETURN_FALSE;
- break;
- }
- RETURN_TRUE;
- }
- /* }}} */
- /* {{{ proto bool imagesetthickness(resource im, int thickness)
- Set line thickness for drawing lines, ellipses, rectangles, polygons etc. */
- PHP_FUNCTION(imagesetthickness)
- {
- zval *IM;
- long thick;
- gdImagePtr im;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rl", &IM, &thick) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- gdImageSetThickness(im, thick);
- RETURN_TRUE;
- }
- /* }}} */
- /* {{{ proto bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)
- Draw an ellipse */
- PHP_FUNCTION(imagefilledellipse)
- {
- zval *IM;
- long cx, cy, w, h, color;
- gdImagePtr im;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rlllll", &IM, &cx, &cy, &w, &h, &color) == FAILURE) {
- return;
- }
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- gdImageFilledEllipse(im, cx, cy, w, h, color);
- RETURN_TRUE;
- }
- /* }}} */
- /* {{{ proto bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)
- Draw a filled partial ellipse …
Large files files are truncated, but you can click here to view the full file