⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gd.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
{	zval **IM, **save;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 2 ||	zend_get_parameters_ex(2, &IM, &save) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);	convert_to_boolean_ex(save);	gdImageSaveAlpha(im, Z_LVAL_PP(save));	RETURN_TRUE;}#endif#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){	zval **IM, **effect;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 2 ||	zend_get_parameters_ex(2, &IM, &effect) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);	convert_to_long_ex(effect);	gdImageAlphaBlending(im, Z_LVAL_PP(effect) );	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 */PHP_FUNCTION(imagecolorallocatealpha){	zval *IM;	long red, green, blue, alpha;	gdImagePtr im;	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zllll", &IM, &red, &green, &blue, &alpha) == FAILURE) {		RETURN_FALSE;	}	ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);	RETURN_LONG(gdImageColorAllocateAlpha(im, red, green, blue, alpha));}/* }}} *//* {{{ 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){	zval **IM, ** red, **green, **blue, **alpha;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {		ZEND_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)));}/* }}} *//* {{{ proto int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)   Find the closest matching colour with alpha transparency */PHP_FUNCTION(imagecolorclosestalpha){	zval **IM, ** red, **green, **blue, **alpha;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {		ZEND_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)));}/* }}} *//* {{{ proto int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)   Find exact match for colour with transparency */PHP_FUNCTION(imagecolorexactalpha){	zval **IM, **red, **green, **blue, **alpha;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 5 || zend_get_parameters_ex(5, &IM, &red, &green, &blue, &alpha) == FAILURE) {		ZEND_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)));}/* }}} *//* {{{ proto bool imagecopyresampled(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 using resampling to help ensure clarity */PHP_FUNCTION(imagecopyresampled){	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;	if (ZEND_NUM_ARGS() != 10 || zend_get_parameters_ex(10, &DIM, &SIM, &DX, &DY, &SX, &SY, &DW, &DH, &SW, &SH) == FAILURE) {		ZEND_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;}/* }}} */#endif#ifdef HAVE_GD_BUNDLED/* {{{ proto resource imagerotate(resource src_im, float angle, int bgdcolor)   Rotate an image using a custom angle */PHP_FUNCTION(imagerotate){	zval **SIM, **ANGLE, **BGDCOLOR;	gdImagePtr im_dst, im_src;	double degrees;	long color;	if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &SIM, &ANGLE, &BGDCOLOR) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);	convert_to_long_ex(BGDCOLOR);	color = Z_LVAL_PP(BGDCOLOR);	convert_to_double_ex(ANGLE);	degrees = Z_DVAL_PP(ANGLE);	im_dst = gdImageRotate(im_src, degrees, color);	if (im_dst != NULL) {		ZEND_REGISTER_RESOURCE(return_value, im_dst, le_gd);	} else {		RETURN_FALSE;	}}/* }}} */#endif#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){	zval **IM, **TILE;	gdImagePtr im, tile;	if (ZEND_NUM_ARGS() != 2 ||	zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {		ZEND_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;}/* }}} */#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){	zval **IM, **TILE;	gdImagePtr im, tile;	if (ZEND_NUM_ARGS() != 2 ||	zend_get_parameters_ex(2, &IM, &TILE) == FAILURE) {		ZEND_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;}/* }}} */#endif/* {{{ proto resource imagecreate(int x_size, int y_size)   Create a new image */PHP_FUNCTION(imagecreate){	zval **x_size, **y_size;	gdImagePtr im;	if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &x_size, &y_size) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	convert_to_long_ex(x_size);	convert_to_long_ex(y_size);	if (Z_LVAL_PP(x_size) <= 0 || Z_LVAL_PP(y_size) <= 0) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid image dimensions");		RETURN_FALSE;	}	im = gdImageCreate(Z_LVAL_PP(x_size), Z_LVAL_PP(y_size));	ZEND_REGISTER_RESOURCE(return_value, im, le_gd);}/* }}} *//* {{{ proto int imagetypes(void)   Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM */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)	ret |= 16;#endif	if (ZEND_NUM_ARGS() != 0) {		WRONG_PARAM_COUNT;	}	RETURN_LONG(ret);}/* }}} *//* {{{ _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) {		return -1;	}	if (!memcmp(data, php_sig_gd2, 3)) {		return PHP_GDIMG_TYPE_GD2;	} else if (!memcmp(data, php_sig_jpg, 3)) {		return PHP_GDIMG_TYPE_JPG;	} else if (!memcmp(data, php_sig_png, 3)) {		if (!memcmp(data, php_sig_png, 8)) {			return PHP_GDIMG_TYPE_PNG;		}	} 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 *)) gdGetC, io_ctx) == 0 && skipheader((int(*)(void *)) gdGetC, io_ctx) == 0 ) {#if HAVE_LIBGD204				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){	gdImagePtr im;	gdIOCtx *io_ctx;	io_ctx = gdNewDynamicCtxEx(Z_STRLEN_PP(data), Z_STRVAL_PP(data), 0);	if (!io_ctx) {		return NULL;	}	im = (*ioctx_func_p)(io_ctx);	if (!im) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Passed data is not in '%s' format", tn);		return NULL;	}#if HAVE_LIBGD204	io_ctx->gd_free(io_ctx);#else	io_ctx->free(io_ctx);#endif	return im;}/* }}} *//* {{{ proto resource imagecreatefromstring(string image)   Create a new image from the image stream in the string */PHP_FUNCTION(imagecreatefromstring){	zval **data;	gdImagePtr im;	int imtype;	char sig[8];	if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &data) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	convert_to_string_ex(data);	memcpy(sig, Z_STRVAL_PP(data), 8);	imtype = _php_image_type(sig);	switch (imtype) {		case PHP_GDIMG_TYPE_JPG:#ifdef HAVE_GD_JPG			im = _php_image_create_from_string(data, "JPEG", gdImageCreateFromJpegCtx TSRMLS_CC);#else			php_error_docref(NULL TSRMLS_CC, E_WARNING, "No JPEG support in this PHP build");			RETURN_FALSE;#endif			break;		case PHP_GDIMG_TYPE_PNG:#ifdef HAVE_GD_PNG			im = _php_image_create_from_string(data, "PNG", gdImageCreateFromPngCtx TSRMLS_CC);#else			php_error_docref(NULL TSRMLS_CC, E_WARNING, "No PNG support in this PHP build");			RETURN_FALSE;#endif			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:			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Data is not in a recognized format.");			RETURN_FALSE;	}	if (!im) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't create GD Image Stream out of Data");		RETURN_FALSE;	}	ZEND_REGISTER_RESOURCE(return_value, im, le_gd);}/* }}} */#endif/* {{{ _php_image_create_from */static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)()){	zval **file, **srcx, **srcy, **width, **height;	gdImagePtr im = NULL;	char *fn=NULL;	php_stream *stream;	FILE * fp = NULL;	int argc=ZEND_NUM_ARGS();	if ((image_type == PHP_GDIMG_TYPE_GD2PART && argc != 5) ||		(image_type != PHP_GDIMG_TYPE_GD2PART && argc != 1) ||		zend_get_parameters_ex(argc, &file, &srcx, &srcy, &width, &height) == FAILURE) {		ZEND_WRONG_PARAM_COUNT();	}	convert_to_string_ex(file);	if (argc == 5 && image_type == PHP_GDIMG_TYPE_GD2PART) {		multi_convert_to_long_ex(4, srcx, srcy, width, height);	}	fn = Z_STRVAL_PP(file);	stream = php_stream_open_wrapper(fn, "rb", ENFORCE_SAFE_MODE|REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);	if (stream == NULL)	{		RETURN_FALSE;	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -