wez Fri Apr 13 05:00:12 2001 EDT
Modified files:
/php4/ext/gd config.m4 gd.c php_gd.h
Log:
Added GD 2.0.1 support.
Index: php4/ext/gd/config.m4
diff -u php4/ext/gd/config.m4:1.54 php4/ext/gd/config.m4:1.55
--- php4/ext/gd/config.m4:1.54 Tue Mar 27 12:34:26 2001
+++ php4/ext/gd/config.m4 Fri Apr 13 05:00:12 2001
@@ -23,7 +23,32 @@
])
])
+AC_DEFUN(PHP_GD_PNG,[
+ AC_MSG_CHECKING([for libpng (needed by gd-2.0)])
+ AC_ARG_WITH(png-dir,
+ [ --with-png-dir[=DIR] GD: png dir for gd-2.0+],[
+ AC_MSG_RESULT(yes)
+ if test "$withval" = "yes"; then
+ withval="/usr/local"
+ fi
+ jold_LIBS=$LIBS
+ LIBS="$LIBS -L$withval/lib"
+ AC_CHECK_LIB(png,png_info_init, [LIBS="$LIBS -lpng"],[AC_MSG_RESULT(no)],)
+ LIBS=$jold_LIBS
+ if test "$shared" = "yes"; then
+ GD_LIBS="$GD_LIBS -lpng"
+ GD_LFLAGS="$GD_LFLAGS -L$withval/lib"
+ else
+ PHP_ADD_LIBRARY_WITH_PATH(png, $withval/lib)
+ fi
+ LIBS="$LIBS -L$withval/lib -lpng"
+ ],[
+ AC_MSG_RESULT(no)
+ AC_MSG_WARN(If configure fails try --with-png-dir=<DIR>)
+ ])
+])
+
AC_DEFUN(PHP_GD_XPM,[
AC_MSG_CHECKING([for libXpm (needed by gd-1.8+)])
AC_ARG_WITH(xpm-dir,
@@ -44,8 +69,31 @@
AC_MSG_WARN(If configure fails try --with-xpm-dir=<DIR>)
])
])
-
+AC_DEFUN(PHP_GD_FREETYPE,[
+ AC_MSG_CHECKING([for freetype(2) (needed by gd 2.0+)])
+ AC_ARG_WITH(freetype-dir,
+ [ --with-freetype-dir[=DIR] GD: freetype 2 dir for gd 2.0+],[
+ for i in /usr /usr/local "$CHECK_FREETYPE" ; do
+ if test -f "$i/include/freetype2/freetype/freetype.h"; then
+ FREETYPE2_DIR="$i"
+ FREETYPE2_INC_DIR="$i/include/freetype/freetype2"
+ fi
+ done
+ if test -n "$FREETYPE2_DIR" ; then
+ AC_DEFINE(HAVE_LIBFREETYPE,1,[ ])
+ PHP_ADD_LIBRARY_WITH_PATH(freetype, $FREETYPE2_DIR/lib)
+ PHP_ADD_INCLUDE($FREETYPE2_INC_DIR)
+ AC_MSG_RESULT(yes)
+ else
+ AC_MSG_RESULT(no (freetype2 not found))
+ fi
+ ],[
+ AC_MSG_RESULT(no)
+ AC_MSG_RESULT(If configure fails, try
+--with-freetype2-dir=<DIR>)
+ ])
+])
+
AC_DEFUN(PHP_GD_CHECK_VERSION,[
AC_CHECK_LIB(z, compress, LIBS="-lz $LIBS",,)
AC_CHECK_LIB(png,png_info_init, LIBS="-lpng $LIBS",,)
@@ -58,6 +106,9 @@
AC_CHECK_LIB(gd, gdImageWBMP, [AC_DEFINE(HAVE_GD_WBMP, 1, [ ])])
AC_CHECK_LIB(gd, gdImageCreateFromJpeg, [AC_DEFINE(HAVE_GD_JPG, 1, [ ])])
AC_CHECK_LIB(gd, gdImageCreateFromXpm, [AC_DEFINE(HAVE_GD_XPM, 1, [ ])])
+ AC_CHECK_LIB(gd, gdImageCreateTrueColor, [AC_DEFINE(HAVE_LIBGD20, 1, [ ])])
+ AC_CHECK_LIB(gd, gdImageSetTile,
+[AC_DEFINE(HAVE_GD_IMAGESETTILE, 1, [ ])])
+ AC_CHECK_LIB(gd, gdImageSetBrush,
+[AC_DEFINE(HAVE_GD_IMAGESETBRUSH, 1, [ ])])
])
@@ -84,7 +135,9 @@
PHP_WITH_SHARED
old_withval=$withval
PHP_GD_JPEG
+ PHP_GD_PNG
PHP_GD_XPM
+ PHP_GD_FREETYPE
withval=$old_withval
AC_MSG_CHECKING(whether to include GD support)
@@ -183,6 +236,8 @@
if test "$with_gd" != "no" && test "$ac_cv_lib_gd_gdImageLine" = "yes"; then
CHECK_TTF="yes"
+
+
AC_ARG_WITH(ttf,
[ --with-ttf[=DIR] GD: Include FreeType 1.x support],[
if test $withval = "no" ; then
@@ -191,7 +246,7 @@
CHECK_TTF="$withval"
fi
])
-
+
AC_MSG_CHECKING(whether to include FreeType 1.x support)
if test -n "$CHECK_TTF" ; then
for i in /usr /usr/local "$CHECK_TTF" ; do
Index: php4/ext/gd/gd.c
diff -u php4/ext/gd/gd.c:1.121 php4/ext/gd/gd.c:1.122
--- php4/ext/gd/gd.c:1.121 Fri Apr 6 11:01:52 2001
+++ php4/ext/gd/gd.c Fri Apr 13 05:00:12 2001
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: gd.c,v 1.121 2001/04/06 18:01:52 sniper Exp $ */
+/* $Id: gd.c,v 1.122 2001/04/13 12:00:12 wez Exp $ */
/* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
Cold Spring Harbor Labs. */
@@ -149,6 +149,24 @@
PHP_FE(imagecopymerge, NULL)
PHP_FE(imagecopyresized, NULL)
PHP_FE(imagecreate,
NULL)
+
+ PHP_FE(imagecreatetruecolor, NULL)
+ PHP_FE(imagetruecolortopalette, NULL)
+ PHP_FE(imagesetthickness, NULL)
+ PHP_FE(imageellipse,
+ NULL)
+ PHP_FE(imagefilledellipse, NULL)
+ PHP_FE(imagefilledarc, NULL)
+ PHP_FE(imagealphablending, NULL)
+ PHP_FE(imagecolorresolvealpha, NULL)
+ PHP_FE(imagecolorclosestalpha, NULL)
+ PHP_FE(imagecolorexactalpha, NULL)
+ PHP_FE(imagecopyresampled, NULL)
+ PHP_FE(imagesettile,
+ NULL)
+
+ PHP_FE(imagesetbrush, NULL)
+ PHP_FE(imagesetstyle, NULL)
+ PHP_FE(imagecopymergegray, NULL)
+
PHP_FE(imagecreatefromstring, NULL)
PHP_FE(imagecreatefrompng, NULL)
PHP_FE(imagepng,
NULL)
@@ -261,6 +279,21 @@
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);
+#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
+#if HAVE_LIBGD20
+ /* for imagefilledarc */
+ 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);
+#endif
return SUCCESS;
}
@@ -271,7 +304,9 @@
/* need to use a PHPAPI function here because it is external module in windows
*/
-#if HAVE_GDIMAGECOLORRESOLVE
+#if HAVE_LIBGD20
+ php_info_print_table_row(2, "GD Version", "2.0 or higher");
+#elif HAVE_GDIMAGECOLORRESOLVE
php_info_print_table_row(2, "GD Version", "1.6.2 or higher");
#elif HAVE_LIBGD13
php_info_print_table_row(2, "GD Version", "between 1.3 and 1.6.1");
@@ -476,6 +511,440 @@
}
/* }}} */
+/* {{{ proto void imagesetstyle(resource im, array styles)
+ Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */
+PHP_FUNCTION(imagesetstyle)
+{
+ zval **IM, **dither, **styles;
+ gdImagePtr im;
+ int * stylearr;
+ int index;
+ HashPosition pos;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &styles) ==
+FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ convert_to_array_ex(dither);
+
+ /* copy the style values in the stylearr */
+ stylearr = emalloc(sizeof(int) * zend_hash_num_elements(HASH_OF(*styles)));
+
+ 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 int imagecreatetruecolor(int x_size, int y_size)
+ Create a new true color image */
+PHP_FUNCTION(imagecreatetruecolor)
+{
+#if HAVE_LIBGD20
+ zval **x_size, **y_size;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) ==
+FAILURE) {
+ WRONG_PARAM_COUNT;
+ }
+
+ convert_to_long_ex(x_size);
+ convert_to_long_ex(y_size);
+
+ im = gdImageCreateTrueColor(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));
+
+ ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ 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)
+{
+#if HAVE_LIBGD20
+ zval **IM, **dither, **ncolors;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &IM, &dither,
+&ncolors) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ convert_to_boolean_ex(dither);
+ convert_to_long_ex(ncolors);
+
+ gdImageTrueColorToPalette(im, Z_LVAL_PP(dither), Z_LVAL_PP(ncolors));
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+
+}
+/* }}} */
+
+/* {{{ proto void imagesetthickness(resource im, int thickness)
+ Set line thickness for drawing lines, ellipses, rectangles, polygons etc. */
+PHP_FUNCTION(imagesetthickness)
+{
+#if HAVE_LIBGD20
+ zval **IM, **thick;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &thick) ==
+FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ convert_to_boolean_ex(thick);
+
+ gdImageSetThickness(im, Z_LVAL_PP(thick));
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+
+}
+/* }}} */
+
+/* {{{ proto void imageellipse(resource im, int cx, int cy, int w, int h, int color)
+ Draw an ellipse */
+PHP_FUNCTION(imageellipse)
+{
+#if 0 && HAVE_LIBGD20 /* this function is missing from GD 2.0.1 */
+ zval **IM, **cx, **cy, **w, **h, **color;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h,
+&color) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(cx);
+ convert_to_long_ex(cy);
+ convert_to_long_ex(w);
+ convert_to_long_ex(h);
+ convert_to_long_ex(color);
+
+ gdImageEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w), Z_LVAL_PP(h),
+Z_LVAL_PP(color));
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto void imagefilledellipse(resource im, int cx, int cy, int w, int h, int
+color)
+ Draw an ellipse */
+PHP_FUNCTION(imagefilledellipse)
+{
+#if HAVE_LIBGD20
+ zval **IM, **cx, **cy, **w, **h, **color;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 6 || zend_get_parameters_ex(6, &IM, &cx, &cy, &w, &h,
+&color) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(cx);
+ convert_to_long_ex(cy);
+ convert_to_long_ex(w);
+ convert_to_long_ex(h);
+ convert_to_long_ex(color);
+
+ gdImageFilledEllipse(im, Z_LVAL_PP(cx), Z_LVAL_PP(cy), Z_LVAL_PP(w),
+Z_LVAL_PP(h), Z_LVAL_PP(color));
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagefilledarc(int im, int cx, int cy, int w, int h, int s, int e,
+int col, int style)
+ Draw a filled partial ellipse */
+PHP_FUNCTION(imagefilledarc)
+{
+#if HAVE_LIBGD20
+ zval **IM, **cx, **cy, **w, **h, **ST, **E, **col, **style;
+ gdImagePtr im;
+ int e,st;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 9 || zend_get_parameters_ex(9, &IM, &cx, &cy, &w,
+&h, &ST, &E, &col, &style) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(cx);
+ convert_to_long_ex(cy);
+ convert_to_long_ex(w);
+ convert_to_long_ex(h);
+ convert_to_long_ex(ST);
+ convert_to_long_ex(E);
+ convert_to_long_ex(col);
+ convert_to_long_ex(style);
+
+ e = Z_LVAL_PP(E);
+ st = Z_LVAL_PP(ST);
+
+ if (e < 0) e %= 360;
+ if (st < 0) st %= 360;
+
+
+gdImageFilledArc(im,Z_LVAL_PP(cx),Z_LVAL_PP(cy),Z_LVAL_PP(w),Z_LVAL_PP(h),st,e,Z_LVAL_PP(col),
+ Z_LVAL_PP(style));
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto void imagealphablending(resource im, bool on)
+ Turn alpha blending mode on or off for the given image */
+PHP_FUNCTION(imagealphablending)
+{
+#if HAVE_LIBGD20
+ zval **IM, **blend;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &blend) ==
+FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ convert_to_boolean_ex(blend);
+
+ gdImageAlphaBlending(im, Z_LVAL_PP(blend));
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagecolorresolvealpha(resource im, int red, int green, int blue,
+int alpha)
+ Resolve/Allocate a colour with an alpha level. Works for true colour and palette
+based images */
+PHP_FUNCTION(imagecolorresolvealpha)
+{
+#if HAVE_LIBGD20
+ zval **IM, ** red, **green, **blue, **alpha;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green,
+&blue, &alpha) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(red);
+ convert_to_long_ex(green);
+ convert_to_long_ex(blue);
+ convert_to_long_ex(alpha);
+
+ RETURN_LONG(gdImageColorResolveAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green),
+Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+
+}
+/* }}} */
+
+/* {{{ proto int imagecolorclosestalpha(resource im, int red, int green, int blue,
+int alpha)
+ Find the closest matching colour with alpha transparency */
+PHP_FUNCTION(imagecolorclosestalpha)
+{
+#if HAVE_LIBGD20
+ zval **IM, ** red, **green, **blue, **alpha;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green,
+&blue, &alpha) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(red);
+ convert_to_long_ex(green);
+ convert_to_long_ex(blue);
+ convert_to_long_ex(alpha);
+
+ RETURN_LONG(gdImageColorClosestAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green),
+Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagecolorexactalpha(resource im, int red, int green, int blue, int
+alpha)
+ Find exact match for colour with transparency */
+PHP_FUNCTION(imagecolorexactalpha)
+{
+#if HAVE_LIBGD20
+ zval **IM, **red, **green, **blue, **alpha;
+ gdImagePtr im;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green,
+&blue, &alpha) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+
+ convert_to_long_ex(red);
+ convert_to_long_ex(green);
+ convert_to_long_ex(blue);
+ convert_to_long_ex(alpha);
+
+ RETURN_LONG(gdImageColorExactAlpha(im, Z_LVAL_PP(red), Z_LVAL_PP(green),
+Z_LVAL_PP(blue), Z_LVAL_PP(alpha)));
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagecopyresampled(int dst_im, int 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 using resampling to help ensure clarity */
+PHP_FUNCTION(imagecopyresampled)
+{
+#if HAVE_LIBGD20
+ zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **DW, **DH;
+ gdImagePtr im_dst, im_src;
+ int srcH, srcW, dstH, dstW, srcY, srcX, dstY, dstX;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 10 ||
+ zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH,
+&SW, &SH) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+
+ convert_to_long_ex(SX);
+ convert_to_long_ex(SY);
+ convert_to_long_ex(SW);
+ convert_to_long_ex(SH);
+ convert_to_long_ex(DX);
+ convert_to_long_ex(DY);
+ convert_to_long_ex(DW);
+ convert_to_long_ex(DH);
+
+ srcX = Z_LVAL_PP(SX);
+ srcY = Z_LVAL_PP(SY);
+ srcH = Z_LVAL_PP(SH);
+ srcW = Z_LVAL_PP(SW);
+ dstX = Z_LVAL_PP(DX);
+ dstY = Z_LVAL_PP(DY);
+ dstH = Z_LVAL_PP(DH);
+ dstW = Z_LVAL_PP(DW);
+
+ gdImageCopyResampled(im_dst, im_src, dstX, dstY, srcX, srcY, dstW, dstH, srcW,
+srcH);
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires GD 2.0 or later",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagesettile(resource image, resource tile)
+ Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED"
+color */
+PHP_FUNCTION(imagesettile)
+{
+#if HAVE_GD_IMAGESETTILE
+ zval **IM, **TILE;
+ gdImagePtr im, tile;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) ==
+FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
+
+ gdImageSetTile(im,tile);
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires a more recent version of GD",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+/* {{{ proto int imagesetbrush(resource image, resource brush)
+ Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED"
+color */
+PHP_FUNCTION(imagesetbrush)
+{
+#if HAVE_GD_IMAGESETBRUSH
+ zval **IM, **TILE;
+ gdImagePtr im, tile;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &IM, &TILE) ==
+FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
+
+ gdImageSetBrush(im,tile);
+
+ RETURN_TRUE;
+#else
+ zend_error(E_ERROR, "%s(): requires a more recent version of GD",
+get_active_function_name());
+#endif
+}
+/* }}} */
+
+
/* {{{ proto int imagecreate(int x_size, int y_size)
Create a new image */
PHP_FUNCTION(imagecreate)
@@ -1987,6 +2456,52 @@
}
/* }}} */
+/* {{{ proto int imagecopymergegray(int src_im, int 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(imagecopymergegray)
+{
+#if HAVE_LIBGD15
+ zval **SIM, **DIM, **SX, **SY, **SW, **SH, **DX, **DY, **PCT;
+ gdImagePtr im_dst, im_src;
+ int srcH, srcW, srcY, srcX, dstY, dstX, pct;
+ GDLS_FETCH();
+
+ if (ZEND_NUM_ARGS() != 9 ||
+ zend_get_parameters_ex(9, &DIM, &SIM, &DX, &DY, &SX, &SY, &SW, &SH,
+&PCT) == FAILURE)
+ {
+ WRONG_PARAM_COUNT;
+ }
+
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
+
+ convert_to_long_ex(SX);
+ convert_to_long_ex(SY);
+ convert_to_long_ex(SW);
+ convert_to_long_ex(SH);
+ convert_to_long_ex(DX);
+ convert_to_long_ex(DY);
+ convert_to_long_ex(PCT);
+
+ srcX = Z_LVAL_PP(SX);
+ srcY = Z_LVAL_PP(SY);
+ srcH = Z_LVAL_PP(SH);
+ srcW = Z_LVAL_PP(SW);
+ dstX = Z_LVAL_PP(DX);
+ dstY = Z_LVAL_PP(DY);
+ pct = Z_LVAL_PP(PCT);
+
+ gdImageCopyMergeGray(im_dst, im_src, dstX, dstY, srcX, srcY, srcW, srcH, pct);
+ RETURN_TRUE;
+#else
+ php_error(E_WARNING, "%s(): was introduced in GD version 1.5",
+get_active_function_name());
+ RETURN_FALSE;
+#endif
+}
+/* }}} */
+
+
+
/* {{{ proto int imagecopyresized(int dst_im, int 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 */
PHP_FUNCTION(imagecopyresized)
@@ -2143,7 +2658,11 @@
fontname = (unsigned char *) Z_STRVAL_PP(FONTNAME);
#ifdef USE_GD_IMGSTRTTF
+# if HAVE_LIBGD20 & HAVE_LIBFREETYPE
+ error = gdImageStringFT(im, brect, col, fontname, ptsize, angle, x, y, str);
+# else
error = gdImageStringTTF(im, brect, col, fontname, ptsize, angle, x, y, str);
+# endif
#else
error = gdttf(im, brect, col, fontname, ptsize, angle, x, y, str);
#endif
Index: php4/ext/gd/php_gd.h
diff -u php4/ext/gd/php_gd.h:1.26 php4/ext/gd/php_gd.h:1.27
--- php4/ext/gd/php_gd.h:1.26 Fri Apr 6 11:01:52 2001
+++ php4/ext/gd/php_gd.h Fri Apr 13 05:00:12 2001
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_gd.h,v 1.26 2001/04/06 18:01:52 sniper Exp $ */
+/* $Id: php_gd.h,v 1.27 2001/04/13 12:00:12 wez Exp $ */
#ifndef PHP_GD_H
#define PHP_GD_H
@@ -95,6 +95,25 @@
PHP_FUNCTION(imagecopyresized);
PHP_FUNCTION(imagetypes);
PHP_FUNCTION(imagecreate);
+
+PHP_FUNCTION(imagecreatetruecolor);
+PHP_FUNCTION(imagetruecolortopalette);
+PHP_FUNCTION(imagesetthickness);
+PHP_FUNCTION(imageellipse);
+PHP_FUNCTION(imagefilledellipse);
+PHP_FUNCTION(imagefilledarc);
+PHP_FUNCTION(imagealphablending);
+PHP_FUNCTION(imagecolorresolvealpha);
+PHP_FUNCTION(imagecolorclosestalpha);
+PHP_FUNCTION(imagecolorexactalpha);
+PHP_FUNCTION(imagecopyresampled);
+PHP_FUNCTION(imagesetthickness);
+PHP_FUNCTION(imagesettile);
+PHP_FUNCTION(imagecopymergegray);
+PHP_FUNCTION(imagesetbrush);
+PHP_FUNCTION(imagesettile);
+PHP_FUNCTION(imagesetstyle);
+
PHP_FUNCTION(imagecreatefromstring);
PHP_FUNCTION(imagecreatefromgif);
PHP_FUNCTION(imagecreatefromjpeg);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]