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

📄 exif.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
};static tag_info_array tag_table_VND_CASIO = {  { 0x0001, "RecordingMode"},  { 0x0002, "Quality"},  { 0x0003, "FocusingMode"},  { 0x0004, "FlashMode"},  { 0x0005, "FlashIntensity"},  { 0x0006, "ObjectDistance"},  { 0x0007, "WhiteBalance"},  { 0x000A, "DigitalZoom"},  { 0x000B, "Sharpness"},  { 0x000C, "Contrast"},  { 0x000D, "Saturation"},  { 0x0014, "CCDSensitivity"},  TAG_TABLE_END};static tag_info_array tag_table_VND_FUJI = {  { 0x0000, "Version"},  { 0x1000, "Quality"},  { 0x1001, "Sharpness"},  { 0x1002, "WhiteBalance"},  { 0x1003, "Color"},  { 0x1004, "Tone"},  { 0x1010, "FlashMode"},  { 0x1011, "FlashStrength"},  { 0x1020, "Macro"},  { 0x1021, "FocusMode"},  { 0x1030, "SlowSync"},  { 0x1031, "PictureMode"},  { 0x1100, "ContTake"},  { 0x1300, "BlurWarning"},  { 0x1301, "FocusWarning"},  { 0x1302, "AEWarning "},  TAG_TABLE_END};static tag_info_array tag_table_VND_NIKON = {  { 0x0003, "Quality"},  { 0x0004, "ColorMode"},  { 0x0005, "ImageAdjustment"},  { 0x0006, "CCDSensitivity"},  { 0x0007, "WhiteBalance"},  { 0x0008, "Focus"},  { 0x000a, "DigitalZoom"},  { 0x000b, "Converter"},  TAG_TABLE_END};  static tag_info_array tag_table_VND_NIKON_990 = {  { 0x0001, "Version"},  { 0x0002, "ISOSetting"},  { 0x0003, "ColorMode"},  { 0x0004, "Quality"},  { 0x0005, "WhiteBalance"},  { 0x0006, "ImageSharpening"},  { 0x0007, "FocusMode"},  { 0x0008, "FlashSetting"},  { 0x000F, "ISOSelection"},  { 0x0080, "ImageAdjustment"},  { 0x0082, "AuxiliaryLens"},  { 0x0085, "ManualFocusDistance"},  { 0x0086, "DigitalZoom"},  { 0x0088, "AFFocusPosition"},  { 0x0010, "DataDump"},  TAG_TABLE_END};  static tag_info_array tag_table_VND_OLYMPUS = {  { 0x0200, "SpecialMode"},  { 0x0201, "JPEGQuality"},  { 0x0202, "Macro"},  { 0x0204, "DigitalZoom"},  { 0x0207, "SoftwareRelease"},  { 0x0208, "PictureInfo"},  { 0x0209, "CameraId"},  { 0x0F00, "DataDump"},  TAG_TABLE_END};typedef enum mn_byte_order_t {	MN_ORDER_INTEL    = 0,	MN_ORDER_MOTOROLA = 1,	MN_ORDER_NORMAL} mn_byte_order_t;typedef enum mn_offset_mode_t {	MN_OFFSET_NORMAL,	MN_OFFSET_MAKER,	MN_OFFSET_GUESS} mn_offset_mode_t;typedef struct {	tag_table_type   tag_table;	char *           make;	char *           model;	char *           id_string;	int              id_string_len;	int              offset;	mn_byte_order_t  byte_order;	mn_offset_mode_t offset_mode;} maker_note_type;static const maker_note_type maker_note_array[] = {  { tag_table_VND_CANON,     "Canon",                   NULL,  NULL,                       0,  0,  MN_ORDER_INTEL,    MN_OFFSET_GUESS},/*  { tag_table_VND_CANON,     "Canon",                   NULL,  NULL,                       0,  0,  MN_ORDER_NORMAL,   MN_OFFSET_NORMAL},*/  { tag_table_VND_CASIO,     "CASIO",                   NULL,  NULL,                       0,  0,  MN_ORDER_MOTOROLA, MN_OFFSET_NORMAL},  { tag_table_VND_FUJI,      "FUJIFILM",                NULL,  "FUJIFILM\x0C\x00\x00\x00", 12, 12, MN_ORDER_INTEL,    MN_OFFSET_MAKER},  { tag_table_VND_NIKON,     "NIKON",                   NULL,  "Nikon\x00\x01\x00",        8,  8,  MN_ORDER_NORMAL,   MN_OFFSET_NORMAL},  { tag_table_VND_NIKON_990, "NIKON",                   NULL,  NULL,                       0,  0,  MN_ORDER_NORMAL,   MN_OFFSET_NORMAL},  { tag_table_VND_OLYMPUS,   "OLYMPUS OPTICAL CO.,LTD", NULL,  "OLYMP\x00\x01\x00",        8,  8,  MN_ORDER_NORMAL,   MN_OFFSET_NORMAL},};/* }}} *//* {{{ exif_get_tagname	Get headername for tag_num or NULL if not defined */static char * exif_get_tagname(int tag_num, char *ret, int len, tag_table_type tag_table TSRMLS_DC){	int i, t;	char tmp[32];	for (i=0;;i++) {		if ((t=tag_table[i].Tag) == tag_num || t==TAG_END_OF_LIST) {			if (t==TAG_END_OF_LIST) {				break;			}			if (ret && len)  {				strncpy(ret, tag_table[i].Desc, abs(len));				if (len<0) {					len = -len;					ret[len-1]='\0';					for(i=strlen(ret);i<len;i++)ret[i]=' ';				}				ret[len-1]='\0';				return ret;			}			return tag_table[i].Desc;		}	}	if (ret && len) {		snprintf(tmp, sizeof(tmp), "UndefinedTag:0x%04X", tag_num);		strncpy(ret, tmp, abs(len));		if (len<0) {			len = -len;			ret[len-1]='\0';			for(i=strlen(ret);i<len;i++)ret[i]=' ';		}		ret[len-1]='\0';		return ret;	}	return "";}/* }}} *//* {{{ exif_char_dump * Do not use! This is a debug function... */#ifdef EXIF_DEBUGstatic unsigned char* exif_char_dump(unsigned char * addr, int len, int offset){	static unsigned char buf[4096+1];	static unsigned char tmp[20];	int c, i, p=0, n = 5+31;	p += sprintf(buf+p, "\nDump Len: %08X (%d)", len, len);	if (len) {		for(i=0; i<len+15 && p+n<=sizeof(buf); i++) {			if (i%16==0) {				p += sprintf(buf+p, "\n%08X: ", i+offset);			}			if (i<len) {				c = *addr++;				p += sprintf(buf+p, "%02X ", c);				tmp[i%16] = c>=32 ? c : '.';				tmp[(i%16)+1] = '\0';			} else {				p += sprintf(buf+p, "   ");			}			if (i%16==15) {				p += sprintf(buf+p, "    %s", tmp);				if (i>=len) {					break;				}			}		}	}	buf[sizeof(buf)-1] = '\0';	return buf;}#endif/* }}} *//* {{{ php_jpg_get16   Get 16 bits motorola order (always) for jpeg header stuff.*/static int php_jpg_get16(void *value){	return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];}/* }}} *//* {{{ php_ifd_get16u * Convert a 16 bit unsigned value from file's native byte order */static int php_ifd_get16u(void *value, int motorola_intel){	if (motorola_intel) {		return (((uchar *)value)[0] << 8) | ((uchar *)value)[1];	} else {		return (((uchar *)value)[1] << 8) | ((uchar *)value)[0];	}}/* }}} *//* {{{ php_ifd_get16s * Convert a 16 bit signed value from file's native byte order */static signed short php_ifd_get16s(void *value, int motorola_intel){	return (signed short)php_ifd_get16u(value, motorola_intel);}/* }}} *//* {{{ php_ifd_get32s * Convert a 32 bit signed value from file's native byte order */static int php_ifd_get32s(void *value, int motorola_intel){	if (motorola_intel) {		return  (((char  *)value)[0] << 24)			  | (((uchar *)value)[1] << 16)			  | (((uchar *)value)[2] << 8 )			  | (((uchar *)value)[3]      );	} else {		return  (((char  *)value)[3] << 24)			  | (((uchar *)value)[2] << 16)			  | (((uchar *)value)[1] << 8 )			  | (((uchar *)value)[0]      );	}}/* }}} *//* {{{ php_ifd_get32u * Write 32 bit unsigned value to data */static unsigned php_ifd_get32u(void *value, int motorola_intel){	return (unsigned)php_ifd_get32s(value, motorola_intel) & 0xffffffff;}/* }}} *//* {{{ php_ifd_set16u * Write 16 bit unsigned value to data */static void php_ifd_set16u(char *data, unsigned int value, int motorola_intel){	if (motorola_intel) {		data[0] = (value & 0xFF00) >> 8;		data[1] = (value & 0x00FF);	} else {		data[1] = (value & 0xFF00) >> 8;		data[0] = (value & 0x00FF);	}}/* }}} *//* {{{ php_ifd_set32u * Convert a 32 bit unsigned value from file's native byte order */static void php_ifd_set32u(char *data, size_t value, int motorola_intel){	if (motorola_intel) {		data[0] = (value & 0xFF000000) >> 24;		data[1] = (value & 0x00FF0000) >> 16;		data[2] = (value & 0x0000FF00) >>  8;		data[3] = (value & 0x000000FF);	} else {		data[3] = (value & 0xFF000000) >> 24;		data[2] = (value & 0x00FF0000) >> 16;		data[1] = (value & 0x0000FF00) >>  8;		data[0] = (value & 0x000000FF);	}}/* }}} *//* {{{ exif_convert_any_format * Evaluate number, be it int, rational, or float from directory. */static double exif_convert_any_format(void *value, int format, int motorola_intel TSRMLS_DC){	int 		s_den;	unsigned 	u_den;	switch(format) {		case TAG_FMT_SBYTE:     return *(signed char *)value;		case TAG_FMT_BYTE:      return *(uchar *)value;		case TAG_FMT_USHORT:    return php_ifd_get16u(value, motorola_intel);		case TAG_FMT_ULONG:     return php_ifd_get32u(value, motorola_intel);		case TAG_FMT_URATIONAL:			u_den = php_ifd_get32u(4+(char *)value, motorola_intel);			if (u_den == 0) {				return 0;			} else {				return (double)php_ifd_get32u(value, motorola_intel) / u_den;			}		case TAG_FMT_SRATIONAL:			s_den = php_ifd_get32s(4+(char *)value, motorola_intel);			if (s_den == 0) {				return 0;			} else {				return (double)php_ifd_get32s(value, motorola_intel) / s_den;			}		case TAG_FMT_SSHORT:    return (signed short)php_ifd_get16u(value, motorola_intel);		case TAG_FMT_SLONG:     return php_ifd_get32s(value, motorola_intel);		/* Not sure if this is correct (never seen float used in Exif format) */		case TAG_FMT_SINGLE:#ifdef EXIF_DEBUG			php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single");#endif			return (double)*(float *)value;		case TAG_FMT_DOUBLE:#ifdef EXIF_DEBUG			php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double");#endif			return *(double *)value;	}	return 0;}/* }}} *//* {{{ exif_convert_any_to_int * Evaluate number, be it int, rational, or float from directory. */static size_t exif_convert_any_to_int(void *value, int format, int motorola_intel TSRMLS_DC){	int 		s_den;	unsigned 	u_den;	switch(format) {		case TAG_FMT_SBYTE:     return *(signed char *)value;		case TAG_FMT_BYTE:      return *(uchar *)value;		case TAG_FMT_USHORT:    return php_ifd_get16u(value, motorola_intel);		case TAG_FMT_ULONG:     return php_ifd_get32u(value, motorola_intel);		case TAG_FMT_URATIONAL:			u_den = php_ifd_get32u(4+(char *)value, motorola_intel);			if (u_den == 0) {				return 0;			} else {				return php_ifd_get32u(value, motorola_intel) / u_den;			}		case TAG_FMT_SRATIONAL:			s_den = php_ifd_get32s(4+(char *)value, motorola_intel);			if (s_den == 0) {				return 0;			} else {				return php_ifd_get32s(value, motorola_intel) / s_den;			}		case TAG_FMT_SSHORT:    return php_ifd_get16u(value, motorola_intel);		case TAG_FMT_SLONG:     return php_ifd_get32s(value, motorola_intel);		/* Not sure if this is correct (never seen float used in Exif format) */		case TAG_FMT_SINGLE:#ifdef EXIF_DEBUG			php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type single");#endif			return (size_t)*(float *)value;		case TAG_FMT_DOUBLE:#ifdef EXIF_DEBUG			php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Found value of type double");#endif			return (size_t)*(double *)value;	}	return 0;}/* }}} *//* {{{ struct image_info_value, image_info_list*/#ifndef WORD#define WORD unsigned short#endif#ifndef DWORD#define DWORD unsigned int#endiftypedef struct {	int             num;	int             den;} signed_rational;typedef struct {	unsigned int    num;	unsigned int    den;} unsigned_rational;typedef union _image_info_value {	char 				*s;	unsigned            u;	int 				i;	float               f;	double              d;	signed_rational 	sr;	unsigned_rational 	ur;	union _image_info_value   *list;} image_info_value;typedef struct {	WORD                tag;	WORD                format;	DWORD               length;	DWORD               dummy;  /* value ptr of tiff directory entry */	char 				*name;	image_info_value    value;} image_info_data;typedef struct {

⌨️ 快捷键说明

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