version 1.1, 2012/02/21 23:47:56
|
version 1.1.1.5, 2014/06/15 20:03:48
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| PHP Version 5 | |
| PHP Version 5 | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1997-2012 The PHP Group | | | Copyright (c) 1997-2014 The PHP Group | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 3.01 of the PHP license, | |
| 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 | |
| that is bundled with this package in the file LICENSE, and is | |
Line 129 int gdImageColorClosestHWB(gdImagePtr im, int r, int g
|
Line 129 int gdImageColorClosestHWB(gdImagePtr im, int r, int g
|
/* IMPORTANT NOTE FOR NEW FILTER |
/* IMPORTANT NOTE FOR NEW FILTER |
* Do not forget to update: |
* Do not forget to update: |
* IMAGE_FILTER_MAX: define the last filter index |
* IMAGE_FILTER_MAX: define the last filter index |
* IMAGE_FILTER_MAX_ARGS: define the biggest amout of arguments | * IMAGE_FILTER_MAX_ARGS: define the biggest amount of arguments |
* image_filter array in PHP_FUNCTION(imagefilter) |
* image_filter array in PHP_FUNCTION(imagefilter) |
* */ |
* */ |
#define IMAGE_FILTER_NEGATE 0 |
#define IMAGE_FILTER_NEGATE 0 |
Line 351 ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefrompng, 0)
|
Line 351 ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefrompng, 0)
|
ZEND_END_ARG_INFO() |
ZEND_END_ARG_INFO() |
#endif |
#endif |
|
|
|
#ifdef HAVE_GD_WEBP |
|
ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromwebp, 0) |
|
ZEND_ARG_INFO(0, filename) |
|
ZEND_END_ARG_INFO() |
|
#endif |
|
|
#ifdef HAVE_GD_XBM |
#ifdef HAVE_GD_XBM |
ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromxbm, 0) |
ZEND_BEGIN_ARG_INFO(arginfo_imagecreatefromxbm, 0) |
ZEND_ARG_INFO(0, filename) |
ZEND_ARG_INFO(0, filename) |
Line 409 ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepng, 0, 0, 1)
|
Line 415 ZEND_BEGIN_ARG_INFO_EX(arginfo_imagepng, 0, 0, 1)
|
ZEND_END_ARG_INFO() |
ZEND_END_ARG_INFO() |
#endif |
#endif |
|
|
|
#ifdef HAVE_GD_WEBP |
|
ZEND_BEGIN_ARG_INFO_EX(arginfo_imagewebp, 0, 0, 1) |
|
ZEND_ARG_INFO(0, im) |
|
ZEND_ARG_INFO(0, filename) |
|
ZEND_END_ARG_INFO() |
|
#endif |
|
|
#ifdef HAVE_GD_JPG |
#ifdef HAVE_GD_JPG |
ZEND_BEGIN_ARG_INFO_EX(arginfo_imagejpeg, 0, 0, 1) |
ZEND_BEGIN_ARG_INFO_EX(arginfo_imagejpeg, 0, 0, 1) |
ZEND_ARG_INFO(0, im) |
ZEND_ARG_INFO(0, im) |
Line 498 ZEND_BEGIN_ARG_INFO(arginfo_imagecolorexact, 0)
|
Line 511 ZEND_BEGIN_ARG_INFO(arginfo_imagecolorexact, 0)
|
ZEND_ARG_INFO(0, blue) |
ZEND_ARG_INFO(0, blue) |
ZEND_END_ARG_INFO() |
ZEND_END_ARG_INFO() |
|
|
ZEND_BEGIN_ARG_INFO(arginfo_imagecolorset, 0) | ZEND_BEGIN_ARG_INFO_EX(arginfo_imagecolorset, 0, 0, 5) |
ZEND_ARG_INFO(0, im) |
ZEND_ARG_INFO(0, im) |
ZEND_ARG_INFO(0, color) |
ZEND_ARG_INFO(0, color) |
ZEND_ARG_INFO(0, red) |
ZEND_ARG_INFO(0, red) |
ZEND_ARG_INFO(0, green) |
ZEND_ARG_INFO(0, green) |
ZEND_ARG_INFO(0, blue) |
ZEND_ARG_INFO(0, blue) |
|
ZEND_ARG_INFO(0, alpha) |
ZEND_END_ARG_INFO() |
ZEND_END_ARG_INFO() |
|
|
ZEND_BEGIN_ARG_INFO(arginfo_imagecolorsforindex, 0) |
ZEND_BEGIN_ARG_INFO(arginfo_imagecolorsforindex, 0) |
Line 945 const zend_function_entry gd_functions[] = {
|
Line 959 const zend_function_entry gd_functions[] = {
|
#ifdef HAVE_GD_PNG |
#ifdef HAVE_GD_PNG |
PHP_FE(imagecreatefrompng, arginfo_imagecreatefrompng) |
PHP_FE(imagecreatefrompng, arginfo_imagecreatefrompng) |
#endif |
#endif |
|
#ifdef HAVE_GD_WEBP |
|
PHP_FE(imagecreatefromwebp, arginfo_imagecreatefromwebp) |
|
#endif |
#ifdef HAVE_GD_GIF_READ |
#ifdef HAVE_GD_GIF_READ |
PHP_FE(imagecreatefromgif, arginfo_imagecreatefromgif) |
PHP_FE(imagecreatefromgif, arginfo_imagecreatefromgif) |
#endif |
#endif |
Line 968 const zend_function_entry gd_functions[] = {
|
Line 985 const zend_function_entry gd_functions[] = {
|
#ifdef HAVE_GD_PNG |
#ifdef HAVE_GD_PNG |
PHP_FE(imagepng, arginfo_imagepng) |
PHP_FE(imagepng, arginfo_imagepng) |
#endif |
#endif |
|
#ifdef HAVE_GD_WEBP |
|
PHP_FE(imagewebp, arginfo_imagewebp) |
|
#endif |
#ifdef HAVE_GD_GIF_CREATE |
#ifdef HAVE_GD_GIF_CREATE |
PHP_FE(imagegif, arginfo_imagegif) |
PHP_FE(imagegif, arginfo_imagegif) |
#endif |
#endif |
Line 1241 PHP_RSHUTDOWN_FUNCTION(gd)
|
Line 1261 PHP_RSHUTDOWN_FUNCTION(gd)
|
/* }}} */ |
/* }}} */ |
|
|
#if HAVE_GD_BUNDLED |
#if HAVE_GD_BUNDLED |
#define PHP_GD_VERSION_STRING "bundled (2.0.34 compatible)" | #define PHP_GD_VERSION_STRING "bundled (2.1.0 compatible)" |
#else |
#else |
#define PHP_GD_VERSION_STRING "2.0" | # ifdef GD_VERSION_STRING |
| # define PHP_GD_VERSION_STRING GD_VERSION_STRING |
| # else |
| # define PHP_GD_VERSION_STRING "2.0" |
| # endif |
#endif |
#endif |
|
|
/* {{{ PHP_MINFO_FUNCTION |
/* {{{ PHP_MINFO_FUNCTION |
Line 1308 PHP_MINFO_FUNCTION(gd)
|
Line 1332 PHP_MINFO_FUNCTION(gd)
|
#endif |
#endif |
#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) |
#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED) |
php_info_print_table_row(2, "XPM Support", "enabled"); |
php_info_print_table_row(2, "XPM Support", "enabled"); |
|
{ |
|
char tmp[12]; |
|
snprintf(tmp, sizeof(tmp), "%d", XpmLibraryVersion()); |
|
php_info_print_table_row(2, "libXpm Version", tmp); |
|
} |
#endif |
#endif |
#ifdef HAVE_GD_XBM |
#ifdef HAVE_GD_XBM |
php_info_print_table_row(2, "XBM Support", "enabled"); |
php_info_print_table_row(2, "XBM Support", "enabled"); |
Line 1470 PHP_FUNCTION(imageloadfont)
|
Line 1499 PHP_FUNCTION(imageloadfont)
|
return; |
return; |
} |
} |
|
|
stream = php_stream_open_wrapper(file, "rb", ENFORCE_SAFE_MODE | IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL); | stream = php_stream_open_wrapper(file, "rb", IGNORE_PATH | IGNORE_URL_WIN | REPORT_ERRORS, NULL); |
if (stream == NULL) { |
if (stream == NULL) { |
RETURN_FALSE; |
RETURN_FALSE; |
} |
} |
Line 1559 PHP_FUNCTION(imageloadfont)
|
Line 1588 PHP_FUNCTION(imageloadfont)
|
* that overlap with the old fonts (with indices 1-5). The first |
* that overlap with the old fonts (with indices 1-5). The first |
* list index given out is always 1. |
* list index given out is always 1. |
*/ |
*/ |
ind = 5 + zend_list_insert(font, le_gd_font); | ind = 5 + zend_list_insert(font, le_gd_font TSRMLS_CC); |
|
|
RETURN_LONG(ind); |
RETURN_LONG(ind); |
} |
} |
Line 2422 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
Line 2451 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
} |
} |
} |
} |
|
|
stream = php_stream_open_wrapper(file, "rb", ENFORCE_SAFE_MODE|REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); | stream = php_stream_open_wrapper(file, "rb", REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL); |
if (stream == NULL) { |
if (stream == NULL) { |
RETURN_FALSE; |
RETURN_FALSE; |
} |
} |
Line 2431 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
Line 2460 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
ioctx_func_p = NULL; /* don't allow sockets without IOCtx */ |
ioctx_func_p = NULL; /* don't allow sockets without IOCtx */ |
#endif |
#endif |
|
|
|
if (image_type == PHP_GDIMG_TYPE_WEBP) { |
|
size_t buff_size; |
|
char *buff; |
|
|
|
/* needs to be malloc (persistent) - GD will free() it later */ |
|
buff_size = php_stream_copy_to_mem(stream, &buff, PHP_STREAM_COPY_ALL, 1); |
|
if (!buff_size) { |
|
php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot read image data"); |
|
goto out_err; |
|
} |
|
im = (*ioctx_func_p)(buff_size, buff); |
|
if (!im) { |
|
goto out_err; |
|
} |
|
goto register_im; |
|
} |
|
|
/* try and avoid allocating a FILE* if the stream is not naturally a FILE* */ |
/* try and avoid allocating a FILE* if the stream is not naturally a FILE* */ |
if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) { |
if (php_stream_is(stream, PHP_STREAM_IS_STDIO)) { |
if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)&fp, REPORT_ERRORS)) { |
if (FAILURE == php_stream_cast(stream, PHP_STREAM_AS_STDIO, (void**)&fp, REPORT_ERRORS)) { |
Line 2508 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
Line 2554 static void _php_image_create_from(INTERNAL_FUNCTION_P
|
fflush(fp); |
fflush(fp); |
} |
} |
|
|
|
register_im: |
if (im) { |
if (im) { |
ZEND_REGISTER_RESOURCE(return_value, im, le_gd); |
ZEND_REGISTER_RESOURCE(return_value, im, le_gd); |
php_stream_close(stream); |
php_stream_close(stream); |
Line 2552 PHP_FUNCTION(imagecreatefrompng)
|
Line 2599 PHP_FUNCTION(imagecreatefrompng)
|
/* }}} */ |
/* }}} */ |
#endif /* HAVE_GD_PNG */ |
#endif /* HAVE_GD_PNG */ |
|
|
|
#ifdef HAVE_GD_WEBP |
|
/* {{{ proto resource imagecreatefrompng(string filename) |
|
Create a new image from PNG file or URL */ |
|
PHP_FUNCTION(imagecreatefromwebp) |
|
{ |
|
_php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WEBP, "WEBP", gdImageCreateFromWebpPtr, gdImageCreateFromWebpPtr); |
|
} |
|
/* }}} */ |
|
#endif /* HAVE_GD_VPX */ |
|
|
#ifdef HAVE_GD_XBM |
#ifdef HAVE_GD_XBM |
/* {{{ proto resource imagecreatefromxbm(string filename) |
/* {{{ proto resource imagecreatefromxbm(string filename) |
Create a new image from XBM file or URL */ |
Create a new image from XBM file or URL */ |
Line 2625 static void _php_image_output(INTERNAL_FUNCTION_PARAME
|
Line 2682 static void _php_image_output(INTERNAL_FUNCTION_PARAME
|
/* When called from imagewbmp() the quality parameter stands for the foreground color. Default: black. */ |
/* When called from imagewbmp() the quality parameter stands for the foreground color. Default: black. */ |
/* The quality parameter for gd2 stands for chunk size */ |
/* The quality parameter for gd2 stands for chunk size */ |
|
|
if (zend_parse_parameters(argc TSRMLS_CC, "r|sll", &imgind, &file, &file_len, &quality, &type) == FAILURE) { | if (zend_parse_parameters(argc TSRMLS_CC, "r|pll", &imgind, &file, &file_len, &quality, &type) == FAILURE) { |
return; |
return; |
} |
} |
|
|
Line 2642 static void _php_image_output(INTERNAL_FUNCTION_PARAME
|
Line 2699 static void _php_image_output(INTERNAL_FUNCTION_PARAME
|
} |
} |
|
|
if (argc >= 2 && file_len) { |
if (argc >= 2 && file_len) { |
if (strlen(file) != file_len) { |
|
RETURN_FALSE; |
|
} |
|
PHP_GD_CHECK_OPEN_BASEDIR(fn, "Invalid filename"); |
PHP_GD_CHECK_OPEN_BASEDIR(fn, "Invalid filename"); |
|
|
fp = VCWD_FOPEN(fn, "wb"); |
fp = VCWD_FOPEN(fn, "wb"); |
Line 2786 PHP_FUNCTION(imagexbm)
|
Line 2840 PHP_FUNCTION(imagexbm)
|
Output GIF image to browser or file */ |
Output GIF image to browser or file */ |
PHP_FUNCTION(imagegif) |
PHP_FUNCTION(imagegif) |
{ |
{ |
#ifdef HAVE_GD_GIF_CTX |
|
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx); |
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGifCtx); |
#else |
|
_php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageGif); |
|
#endif |
|
} |
} |
/* }}} */ |
/* }}} */ |
#endif /* HAVE_GD_GIF_CREATE */ |
#endif /* HAVE_GD_GIF_CREATE */ |
Line 2800 PHP_FUNCTION(imagegif)
|
Line 2850 PHP_FUNCTION(imagegif)
|
Output PNG image to browser or file */ |
Output PNG image to browser or file */ |
PHP_FUNCTION(imagepng) |
PHP_FUNCTION(imagepng) |
{ |
{ |
#ifdef USE_GD_IOCTX |
|
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePngCtxEx); |
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePngCtxEx); |
#else |
|
_php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImagePng); |
|
#endif |
|
} |
} |
/* }}} */ |
/* }}} */ |
#endif /* HAVE_GD_PNG */ |
#endif /* HAVE_GD_PNG */ |
|
|
|
|
|
#ifdef HAVE_GD_WEBP |
|
/* {{{ proto bool imagewebp(resource im [, string filename[, quality]] ) |
|
Output PNG image to browser or file */ |
|
PHP_FUNCTION(imagewebp) |
|
{ |
|
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WEBP, "WEBP", gdImageWebpCtx); |
|
} |
|
/* }}} */ |
|
#endif /* HAVE_GD_WEBP */ |
|
|
|
|
#ifdef HAVE_GD_JPG |
#ifdef HAVE_GD_JPG |
/* {{{ proto bool imagejpeg(resource im [, string filename [, int quality]]) |
/* {{{ proto bool imagejpeg(resource im [, string filename [, int quality]]) |
Output JPEG image to browser or file */ |
Output JPEG image to browser or file */ |
PHP_FUNCTION(imagejpeg) |
PHP_FUNCTION(imagejpeg) |
{ |
{ |
#ifdef USE_GD_IOCTX |
|
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpegCtx); |
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpegCtx); |
#else |
|
_php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageJpeg); |
|
#endif |
|
} |
} |
/* }}} */ |
/* }}} */ |
#endif /* HAVE_GD_JPG */ |
#endif /* HAVE_GD_JPG */ |
Line 2828 PHP_FUNCTION(imagejpeg)
|
Line 2882 PHP_FUNCTION(imagejpeg)
|
Output WBMP image to browser or file */ |
Output WBMP image to browser or file */ |
PHP_FUNCTION(imagewbmp) |
PHP_FUNCTION(imagewbmp) |
{ |
{ |
#ifdef USE_GD_IOCTX |
|
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx); |
_php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMPCtx); |
#else |
|
_php_image_output(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageWBMP); |
|
#endif |
|
} |
} |
/* }}} */ |
/* }}} */ |
#endif /* HAVE_GD_WBMP */ |
#endif /* HAVE_GD_WBMP */ |
Line 3061 PHP_FUNCTION(imagecolorexact)
|
Line 3111 PHP_FUNCTION(imagecolorexact)
|
PHP_FUNCTION(imagecolorset) |
PHP_FUNCTION(imagecolorset) |
{ |
{ |
zval *IM; |
zval *IM; |
long color, red, green, blue; | long color, red, green, blue, alpha = 0; |
int col; |
int col; |
gdImagePtr im; |
gdImagePtr im; |
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll", &IM, &color, &red, &green, &blue) == FAILURE) { | if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rllll|l", &IM, &color, &red, &green, &blue, &alpha) == FAILURE) { |
return; |
return; |
} |
} |
|
|
Line 3077 PHP_FUNCTION(imagecolorset)
|
Line 3127 PHP_FUNCTION(imagecolorset)
|
im->red[col] = red; |
im->red[col] = red; |
im->green[col] = green; |
im->green[col] = green; |
im->blue[col] = blue; |
im->blue[col] = blue; |
|
im->alpha[col] = alpha; |
} else { |
} else { |
RETURN_FALSE; |
RETURN_FALSE; |
} |
} |
Line 4096 PHP_FUNCTION(imagepscopyfont)
|
Line 4147 PHP_FUNCTION(imagepscopyfont)
|
} |
} |
|
|
nf_ind->extend = 1; |
nf_ind->extend = 1; |
l_ind = zend_list_insert(nf_ind, le_ps_font); | l_ind = zend_list_insert(nf_ind, le_ps_font TSRMLS_CC); |
RETURN_LONG(l_ind); |
RETURN_LONG(l_ind); |
} |
} |
*/ |
*/ |
Line 4145 PHP_FUNCTION(imagepsencodefont)
|
Line 4196 PHP_FUNCTION(imagepsencodefont)
|
RETURN_FALSE; |
RETURN_FALSE; |
} |
} |
|
|
zend_list_insert(enc_vector, le_ps_enc); | zend_list_insert(enc_vector, le_ps_enc TSRMLS_CC); |
|
|
RETURN_TRUE; |
RETURN_TRUE; |
} |
} |
Line 4550 static void _php_image_convert(INTERNAL_FUNCTION_PARAM
|
Line 4601 static void _php_image_convert(INTERNAL_FUNCTION_PARAM
|
long ignore_warning; |
long ignore_warning; |
#endif |
#endif |
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sslll", &f_org, &f_org_len, &f_dest, &f_dest_len, &height, &width, &threshold) == FAILURE) { | 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; |
return; |
} |
} |
|
|
Line 4559 static void _php_image_convert(INTERNAL_FUNCTION_PARAM
|
Line 4610 static void _php_image_convert(INTERNAL_FUNCTION_PARAM
|
dest_height = height; |
dest_height = height; |
dest_width = width; |
dest_width = width; |
int_threshold = threshold; |
int_threshold = threshold; |
|
|
if (strlen(f_org) != f_org_len) { |
|
RETURN_FALSE; |
|
} |
|
|
|
if (strlen(f_dest) != f_dest_len) { |
|
RETURN_FALSE; |
|
} |
|
|
|
/* Check threshold value */ |
/* Check threshold value */ |
if (int_threshold < 0 || int_threshold > 8) { |
if (int_threshold < 0 || int_threshold > 8) { |