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

📄 gd.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*   +----------------------------------------------------------------------+   | PHP Version 4                                                        |   +----------------------------------------------------------------------+   | Copyright (c) 1997-2007 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@fast.no>                                   |   |          Jim Winstead <jimw@php.net>                                 |   +----------------------------------------------------------------------+ *//* $Id: gd.c,v 1.221.2.56.2.5 2007/01/01 09:46:42 sebastian Exp $ *//* 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 "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>#endif#if HAVE_LIBGDstatic 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# include "gdttf.h"#endif#ifndef M_PI#define M_PI 3.14159265358979323846#endif#ifdef ENABLE_GD_TTFstatic 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    NULLtypedef FILE gdIOCtx;#define CTX_PUTC(c, fp) fputc(c, fp)#endif#ifndef HAVE_GDIMAGECOLORRESOLVEextern int gdImageColorResolve(gdImagePtr, int, int, int);#endif#if HAVE_COLORCLOSESTHWBint gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b);#endif#ifndef HAVE_GD_DYNAMIC_CTX_EX#define gdNewDynamicCtxEx(len, data, val) gdNewDynamicCtx(len, data)#endifstatic 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);/* {{{ gd_functions[] */function_entry gd_functions[] = {	PHP_FE(gd_info,                                 NULL)	PHP_FE(imagearc,								NULL)	PHP_FE(imageellipse,							NULL)	PHP_FE(imagechar,								NULL)	PHP_FE(imagecharup,								NULL)	PHP_FE(imagecolorat,							NULL)	PHP_FE(imagecolorallocate,						NULL)#if HAVE_LIBGD15	PHP_FE(imagepalettecopy,						NULL)	PHP_FE(imagecreatefromstring,					NULL)#endif	PHP_FE(imagecolorclosest,						NULL)#if HAVE_COLORCLOSESTHWB	PHP_FE(imagecolorclosesthwb,					NULL)#endif	PHP_FE(imagecolordeallocate,					NULL)	PHP_FE(imagecolorresolve,						NULL)	PHP_FE(imagecolorexact,							NULL)	PHP_FE(imagecolorset,							NULL)	PHP_FE(imagecolortransparent,					NULL)	PHP_FE(imagecolorstotal,						NULL)	PHP_FE(imagecolorsforindex,						NULL)	PHP_FE(imagecopy,								NULL)#if HAVE_LIBGD15	PHP_FE(imagecopymerge,							NULL)	PHP_FE(imagecopymergegray,						NULL)#endif	PHP_FE(imagecopyresized,						NULL)	PHP_FE(imagecreate,								NULL)#if HAVE_LIBGD20	PHP_FE(imagecreatetruecolor,					NULL)	PHP_FE(imageistruecolor,						NULL)	PHP_FE(imagetruecolortopalette,					NULL)	PHP_FE(imagesetthickness,						NULL)	PHP_FE(imagefilledarc,							NULL)	PHP_FE(imagefilledellipse,						NULL)	PHP_FE(imagealphablending,						NULL)	PHP_FE(imagesavealpha,							NULL)	PHP_FE(imagecolorallocatealpha,					NULL)	PHP_FE(imagecolorresolvealpha, 					NULL)	PHP_FE(imagecolorclosestalpha,					NULL)	PHP_FE(imagecolorexactalpha,					NULL)	PHP_FE(imagecopyresampled,						NULL)#endif#ifdef HAVE_GD_BUNDLED	PHP_FE(imagerotate,     						NULL)	PHP_FE(imageantialias,							NULL)#endif#if HAVE_GD_IMAGESETTILE	PHP_FE(imagesettile,							NULL)#endif#if HAVE_GD_IMAGESETBRUSH	PHP_FE(imagesetbrush,							NULL)#endif	PHP_FE(imagesetstyle,							NULL)#ifdef HAVE_GD_PNG	PHP_FE(imagecreatefrompng,						NULL)#endif#ifdef HAVE_GD_GIF_READ	PHP_FE(imagecreatefromgif,						NULL)#endif#ifdef HAVE_GD_JPG	PHP_FE(imagecreatefromjpeg,						NULL)#endif#ifdef HAVE_GD_WBMP	PHP_FE(imagecreatefromwbmp,						NULL)#endif#ifdef HAVE_GD_XBM	PHP_FE(imagecreatefromxbm,						NULL)#endif#if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)	PHP_FE(imagecreatefromxpm,						NULL)#endif	PHP_FE(imagecreatefromgd,						NULL)#ifdef HAVE_GD_GD2	PHP_FE(imagecreatefromgd2,						NULL)	PHP_FE(imagecreatefromgd2part,					NULL)#endif#ifdef HAVE_GD_PNG	PHP_FE(imagepng,								NULL)#endif#ifdef HAVE_GD_GIF_CREATE	PHP_FE(imagegif,								NULL)#endif#ifdef HAVE_GD_JPG	PHP_FE(imagejpeg,								NULL)#endif#ifdef HAVE_GD_WBMP	PHP_FE(imagewbmp,                               NULL)#endif	PHP_FE(imagegd,									NULL)#ifdef HAVE_GD_GD2	PHP_FE(imagegd2,								NULL)#endif	PHP_FE(imagedestroy,							NULL)	PHP_FE(imagegammacorrect,						NULL)	PHP_FE(imagefill,								NULL)	PHP_FE(imagefilledpolygon,						NULL)	PHP_FE(imagefilledrectangle,					NULL)	PHP_FE(imagefilltoborder,						NULL)	PHP_FE(imagefontwidth,							NULL)	PHP_FE(imagefontheight,							NULL)	PHP_FE(imageinterlace,							NULL)	PHP_FE(imageline,								NULL)	PHP_FE(imageloadfont,							NULL)	PHP_FE(imagepolygon,							NULL)	PHP_FE(imagerectangle,							NULL)	PHP_FE(imagesetpixel,							NULL)	PHP_FE(imagestring,								NULL)	PHP_FE(imagestringup,							NULL)	PHP_FE(imagesx,									NULL)	PHP_FE(imagesy,									NULL)	PHP_FE(imagedashedline,							NULL)#ifdef ENABLE_GD_TTF	PHP_FE(imagettfbbox,							NULL)	PHP_FE(imagettftext,							NULL)#if HAVE_LIBGD20 && HAVE_LIBFREETYPE && HAVE_GD_STRINGFTEX	PHP_FE(imageftbbox,								NULL)	PHP_FE(imagefttext,								NULL)#endif#endif#ifdef HAVE_LIBT1	PHP_FE(imagepsloadfont,							NULL)	/*	PHP_FE(imagepscopyfont,							NULL)	*/	PHP_FE(imagepsfreefont,							NULL)	PHP_FE(imagepsencodefont,						NULL)	PHP_FE(imagepsextendfont,						NULL)	PHP_FE(imagepsslantfont,						NULL)	PHP_FE(imagepstext,								NULL)	PHP_FE(imagepsbbox,								NULL)#endif	PHP_FE(imagetypes,								NULL)#if defined(HAVE_GD_JPG) && defined(HAVE_GD_WBMP)	PHP_FE(jpeg2wbmp,								NULL)#endif#if defined(HAVE_GD_PNG) && defined(HAVE_GD_WBMP)	PHP_FE(png2wbmp,								NULL)#endif#ifdef HAVE_GD_WBMP	PHP_FE(image2wbmp,								NULL)#endif#if HAVE_GD_BUNDLED	PHP_FE(imagelayereffect,						NULL)	PHP_FE(imagecolormatch,							NULL)#endif	{NULL, NULL, NULL}};/* }}} */zend_module_entry gd_module_entry = {	STANDARD_MODULE_HEADER,	"gd",	gd_functions,	PHP_MINIT(gd),	PHP_MSHUTDOWN(gd),	NULL,#if HAVE_LIBGD20 && HAVE_GD_STRINGFT && (HAVE_GD_FONTCACHESHUTDOWN || HAVE_GD_FREEFONTCACHE)	PHP_RSHUTDOWN(gd),#else	NULL,#endif	PHP_MINFO(gd),	NO_VERSION_YET,	STANDARD_MODULE_PROPERTIES};#ifdef COMPILE_DL_GDZEND_GET_MODULE(gd)#endif/* {{{ 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 */PHP_MSHUTDOWN_FUNCTION(gd){#if HAVE_LIBT1	T1_CloseLib();#endif	return SUCCESS;}/* }}} *//* {{{ 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_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_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#if HAVE_LIBGD20	/* 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);#endif/* 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	return SUCCESS;}/* }}} *//* {{{ PHP_RSHUTDOWN_FUNCTION */#if HAVE_LIBGD20 && HAVE_GD_STRINGFT && (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.28 compatible)"#elif HAVE_LIBGD20#define PHP_GD_VERSION_STRING "2.0 or higher"#elif HAVE_GDIMAGECOLORRESOLVE#define PHP_GD_VERSION_STRING "1.6.2 or higher"#elif HAVE_LIBGD13#define PHP_GD_VERSION_STRING "between 1.3 and 1.6.1"#else#define PHP_GD_VERSION_STRING "1.2"#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");#elif HAVE_LIBTTF	php_info_print_table_row(2, "FreeType Linkage", "with TTF library");#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	php_info_print_table_row(2, "JPG Support", "enabled");#endif#ifdef HAVE_GD_PNG	php_info_print_table_row(2, "PNG Support", "enabled");#endif#ifdef HAVE_GD_WBMP	php_info_print_table_row(2, "WBMP 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();}/* }}} *//* {{{ proto array gd_info() */PHP_FUNCTION(gd_info){	if (ZEND_NUM_ARGS() != 0) {		ZEND_WRONG_PARAM_COUNT();

⌨️ 快捷键说明

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