[PHP-CVS] cvs: php4 /ext/standard image.c php_image.h
helly Sat Feb 1 18:14:13 2003 EDT Modified files: /php4/ext/standard image.c php_image.h Log: @Added XBM support for GetImageSize(). (helly) Index: php4/ext/standard/image.c diff -u php4/ext/standard/image.c:1.86 php4/ext/standard/image.c:1.87 --- php4/ext/standard/image.c:1.86 Fri Jan 24 19:23:03 2003 +++ php4/ext/standard/image.c Sat Feb 1 18:14:13 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: image.c,v 1.86 2003/01/25 00:23:03 iliaa Exp $ */ +/* $Id: image.c,v 1.87 2003/02/01 23:14:13 helly Exp $ */ #include php.h #include stdio.h @@ -89,6 +89,7 @@ REGISTER_LONG_CONSTANT(IMAGETYPE_IFF, IMAGE_FILETYPE_IFF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_WBMP,IMAGE_FILETYPE_WBMP,CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_JPEG2000,IMAGE_FILETYPE_JPC ,CONST_CS | CONST_PERSISTENT);/* keep alias */ + REGISTER_LONG_CONSTANT(IMAGETYPE_XBM, IMAGE_FILETYPE_XBM, CONST_CS | +CONST_PERSISTENT); return SUCCESS; } /* }}} */ @@ -953,6 +954,73 @@ } /* }}} */ +/* {{{ php_get_xbm + */ +#define MAX_XBM_LINE_SIZE 255 +static int php_get_xbm(php_stream *stream, struct gfxinfo **result TSRMLS_DC) +{ +char fline[MAX_XBM_LINE_SIZE]; +char iname[MAX_XBM_LINE_SIZE]; +char *type; +int value, width = 0, height = 0; + + if (result) { + *result = NULL; + } + if (php_stream_rewind(stream)) { + return 0; + } + while (php_stream_gets(stream, fline, MAX_XBM_LINE_SIZE)) { + fline[MAX_XBM_LINE_SIZE-1] = '\0'; + if (strlen(fline) == MAX_XBM_LINE_SIZE-1) { + return 0; + } + + if (sscanf(fline, #define %s %d, iname, value) == 2) { + if (!(type = strrchr(iname, '_'))) { + type = iname; + } else { + type++; + } + + if (!strcmp(width, type)) { + width = (unsigned int) value; + if (height) { + break; + } + } + if (!strcmp(height, type)) { + height = (unsigned int) value; + if (width) { + break; + } + } + } + } + + if (width height) { + if (result) { + *result = (struct gfxinfo *) ecalloc(1, sizeof(struct +gfxinfo)); + (*result)-width = width; + (*result)-height = height; + } + return IMAGE_FILETYPE_XBM; + } + + return 0; +} +/* }}} */ + +/* {{{ php_handle_xbm + */ +static struct gfxinfo *php_handle_xbm(php_stream * stream TSRMLS_DC) +{ + struct gfxinfo *result; + php_get_xbm(stream, result TSRMLS_CC); + return result; +} +/* }}} */ + /* {{{ php_image_type_to_mime_type * Convert internal image_type to mime type */ PHPAPI const char * php_image_type_to_mime_type(int image_type) @@ -982,6 +1050,8 @@ return application/octet-stream; case IMAGE_FILETYPE_JP2: return image/jp2; + case IMAGE_FILETYPE_XBM: + return image/xbm; default: case IMAGE_FILETYPE_UNKNOWN: return application/octet-stream; /* suppose binary format */ @@ -1073,6 +1143,9 @@ if (php_get_wbmp(stream, NULL, 1 TSRMLS_CC)) { return IMAGE_FILETYPE_WBMP; } + if (php_get_xbm(stream, NULL TSRMLS_CC)) { + return IMAGE_FILETYPE_XBM; + } return IMAGE_FILETYPE_UNKNOWN; } /* }}} */ @@ -1166,6 +1239,9 @@ break; case IMAGE_FILETYPE_WBMP: result = php_handle_wbmp(stream TSRMLS_CC); + break; + case IMAGE_FILETYPE_XBM: + result = php_handle_xbm(stream TSRMLS_CC); break; default: case IMAGE_FILETYPE_UNKNOWN: Index: php4/ext/standard/php_image.h diff -u php4/ext/standard/php_image.h:1.22 php4/ext/standard/php_image.h:1.23 --- php4/ext/standard/php_image.h:1.22 Thu Jan 16 14:45:26 2003 +++ php4/ext/standard/php_image.h Sat Feb 1 18:14:13 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_image.h,v 1.22 2003/01/16 19:45:26 helly Exp $ */ +/* $Id: php_image.h,v 1.23 2003/02/01 23:14:13 helly Exp $ */ #ifndef
[PHP-CVS] cvs: php4 /ext/standard image.c php_image.h
helly Thu Jan 16 14:45:27 2003 EDT Modified files: /php4/ext/standard image.c php_image.h Log: - corrected error in file detection for very small files - JPEG 2000 support, mostly Adam Wright [EMAIL PROTECTED] @Enhanced jpeg 2000 support for GetImageSize(). (marcus, Adam Wright) Index: php4/ext/standard/image.c diff -u php4/ext/standard/image.c:1.82 php4/ext/standard/image.c:1.83 --- php4/ext/standard/image.c:1.82 Wed Jan 8 19:15:33 2003 +++ php4/ext/standard/image.c Thu Jan 16 14:45:26 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: image.c,v 1.82 2003/01/09 00:15:33 sniper Exp $ */ +/* $Id: image.c,v 1.83 2003/01/16 19:45:26 helly Exp $ */ #include php.h #include stdio.h @@ -46,10 +46,13 @@ PHPAPI const char php_sig_swc[3] = {'C', 'W', 'S'}; PHPAPI const char php_sig_jpg[3] = {(char) 0xff, (char) 0xd8, (char) 0xff}; PHPAPI const char php_sig_png[8] = {(char) 0x89, (char) 0x50, (char) 0x4e, (char) 0x47, -(char) 0x0d, (char) 0x0a, (char) 0x1a, (char) 0x0a}; +(char) 0x0d, (char) 0x0a, (char) 0x1a, (char) +0x0a}; PHPAPI const char php_sig_tif_ii[4] = {'I','I', (char)0x2A, (char)0x00}; PHPAPI const char php_sig_tif_mm[4] = {'M','M', (char)0x00, (char)0x2A}; -PHPAPI const char php_sig_jpc[3] = {(char)0xFF, (char)0x4F, (char)0xff}; +PHPAPI const char php_sig_jpc[3] = {(char)0xff, (char)0x4f, (char)0xff}; +PHPAPI const char php_sig_jp2[12] = {(char)0x00, (char)0x00, (char)0x00, (char)0x0c, + (char)0x6a, (char)0x50, (char)0x20, (char)0x20, + (char)0x0d, (char)0x0a, (char)0x87, (char)0x0a}; PHPAPI const char php_sig_iff[4] = {'F','O','R','M'}; /* REMEMBER TO ADD MIME-TYPE TO FUNCTION php_image_type_to_mime_type */ @@ -76,7 +79,7 @@ REGISTER_LONG_CONSTANT(IMAGETYPE_BMP, IMAGE_FILETYPE_BMP, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_TIFF_II, IMAGE_FILETYPE_TIFF_II, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_TIFF_MM, IMAGE_FILETYPE_TIFF_MM, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT(IMAGETYPE_JPC, IMAGE_FILETYPE_JPC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT(IMAGETYPE_JPC, IMAGE_FILETYPE_JPC ,CONST_CS | +CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_JP2, IMAGE_FILETYPE_JP2, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_JPX, IMAGE_FILETYPE_JPX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_JB2, IMAGE_FILETYPE_JB2, CONST_CS | CONST_PERSISTENT); @@ -85,6 +88,7 @@ #endif REGISTER_LONG_CONSTANT(IMAGETYPE_IFF, IMAGE_FILETYPE_IFF, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT(IMAGETYPE_WBMP,IMAGE_FILETYPE_WBMP,CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT(IMAGETYPE_JPEG2000,IMAGE_FILETYPE_JPC ,CONST_CS | +CONST_PERSISTENT);/* keep alias */ return SUCCESS; } /* }}} */ @@ -534,12 +538,6 @@ } /* }}} */ -/* {{{ jpeg2000 constants - See ext/exif for more */ -#define JC_SOC 0x4F /* Start of codestream */ -#define JC_SIZ 0x51 /* Image and tile size */ -/* }}} */ - /* {{{ php_read4 */ static unsigned int php_read4(php_stream * stream TSRMLS_DC) @@ -556,37 +554,147 @@ } /* }}} */ -/* {{{ php_handle_tiff - main loop to parse TIFF structure */ +/* {{{ JPEG 2000 Marker Codes */ +#define JPEG2000_MARKER_PREFIX 0xFF /* All marker codes start with this */ +#define JPEG2000_MARKER_SOC 0x4F /* Start of Codestream */ +#define JPEG2000_MARKER_SOT 0x90 /* Start of Tile part */ +#define JPEG2000_MARKER_SOD 0x93 /* Start of Data */ +#define JPEG2000_MARKER_EOC 0xD9 /* End of Codestream */ +#define JPEG2000_MARKER_SIZ 0x51 /* Image and tile size */ +#define JPEG2000_MARKER_COD 0x52 /* Coding style default */ +#define JPEG2000_MARKER_COC 0x53 /* Coding style component */ +#define JPEG2000_MARKER_RGN 0x5E /* Region of interest */ +#define JPEG2000_MARKER_QCD 0x5C /* Quantization default */ +#define JPEG2000_MARKER_QCC 0x5D /* Quantization component */ +#define JPEG2000_MARKER_POC 0x5F /* Progression order change */ +#define JPEG2000_MARKER_TLM 0x55 /* Tile-part lengths */ +#define JPEG2000_MARKER_PLM 0x57 /* Packet length, main header */ +#define JPEG2000_MARKER_PLT 0x58 /* Packet length, tile-part header */ +#define JPEG2000_MARKER_PPM 0x60 /* Packed packet headers, main header */ +#define JPEG2000_MARKER_PPT 0x61 /* Packed packet headers, tile part header */ +#define JPEG2000_MARKER_SOP 0x91 /* Start of packet */ +#define JPEG2000_MARKER_EPH 0x92 /* End of packet header */ +#define JPEG2000_MARKER_CRG 0x63 /* Component registration */ +#define JPEG2000_MARKER_COM 0x64 /* Comment */ +/* }}} */ + +/* {{{ php_handle_jpc + Main loop to parse JPEG2000 raw codestream structure */
[PHP-CVS] cvs: php4 /ext/standard image.c php_image.h
iliaa Wed Jan 8 15:36:03 2003 EDT Modified files: /php4/ext/standard image.c php_image.h Log: Added support for WBMP images. Index: php4/ext/standard/image.c diff -u php4/ext/standard/image.c:1.80 php4/ext/standard/image.c:1.81 --- php4/ext/standard/image.c:1.80 Tue Dec 31 11:07:42 2002 +++ php4/ext/standard/image.c Wed Jan 8 15:36:03 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: image.c,v 1.80 2002/12/31 16:07:42 sebastian Exp $ */ +/* $Id: image.c,v 1.81 2003/01/08 20:36:03 iliaa Exp $ */ #include php.h #include stdio.h @@ -84,6 +84,7 @@ REGISTER_LONG_CONSTANT(IMAGETYPE_SWC, IMAGE_FILETYPE_SWC, CONST_CS | CONST_PERSISTENT); #endif REGISTER_LONG_CONSTANT(IMAGETYPE_IFF, IMAGE_FILETYPE_IFF, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT(IMAGETYPE_WBMP,IMAGE_FILETYPE_WBMP,CONST_CS | +CONST_PERSISTENT); return SUCCESS; } /* }}} */ @@ -786,6 +787,78 @@ } /* }}} */ +/* {{{ php_get_wbmp + * int WBMP file format type + * byte Header Type + * byte Extended Header + * byte Header Data (type 00 = multibyte) + * byte Header Data (type 11 = name/pairs) + * int Number of columns + * int Number of rows + */ +static int php_get_wbmp(php_stream *stream, struct gfxinfo **result, int check +TSRMLS_DC) +{ + int i, width = 0, height = 0; + + if (php_stream_rewind(stream)) { + return 0; + } + + /* get type */ + if (php_stream_getc(stream) != 0) { + return 0; + } + + /* skip header */ + do { + i = php_stream_getc(stream); + if (i 0) { + return 0; + } + } while (i 0x80); + + /* get width */ + do { + i = php_stream_getc(stream); + if (i 0) { + return 0; + } + width = (width 7) | (i 0x7f); + } while (i 0x80); + + /* get height */ + do { + i = php_stream_getc(stream); + if (i 0) { + return 0; + } + height = (height 7) | (i 0x7f); + } while (i 0x80); + + if (!check) { + (*result)-width = width; + (*result)-height = height; + } + + return IMAGE_FILETYPE_WBMP; +} +/* }}} */ + +/* {{{ php_handle_wbmp +*/ +static struct gfxinfo *php_handle_wbmp(php_stream * stream TSRMLS_DC) +{ + struct gfxinfo *result = (struct gfxinfo *) ecalloc(1, sizeof(struct gfxinfo)); + + if (!php_get_wbmp(stream, result, 0 TSRMLS_CC)) { + efree(result); + return NULL; + } + + return result; +} +/* }}} */ + /* {{{ php_image_type_to_mime_type * Convert internal image_type to mime type */ PHPAPI const char * php_image_type_to_mime_type(int image_type) @@ -810,6 +883,8 @@ return image/tiff; case IMAGE_FILETYPE_IFF: return image/iff; + case IMAGE_FILETYPE_WBMP: + return image/vnd.wap.wbmp; default: case IMAGE_FILETYPE_UNKNOWN: return application/octet-stream; /* suppose binary format */ @@ -878,6 +953,9 @@ if (!memcmp(filetype, php_sig_iff, 4)) { return IMAGE_FILETYPE_IFF; } + if (php_get_wbmp(stream, NULL, 1 TSRMLS_DC)) { + return IMAGE_FILETYPE_WBMP; + } return IMAGE_FILETYPE_UNKNOWN; } @@ -966,6 +1044,10 @@ break; case IMAGE_FILETYPE_IFF: result = php_handle_iff(stream TSRMLS_CC); + break; + case IMAGE_FILETYPE_WBMP: + result = php_handle_wbmp(stream TSRMLS_CC); + break; default: case IMAGE_FILETYPE_UNKNOWN: break; Index: php4/ext/standard/php_image.h diff -u php4/ext/standard/php_image.h:1.20 php4/ext/standard/php_image.h:1.21 --- php4/ext/standard/php_image.h:1.20 Tue Dec 31 11:07:51 2002 +++ php4/ext/standard/php_image.h Wed Jan 8 15:36:03 2003 @@ -17,7 +17,7 @@ +--+ */ -/* $Id: php_image.h,v 1.20 2002/12/31 16:07:51 sebastian Exp $ */ +/* $Id: php_image.h,v 1.21 2003/01/08 20:36:03 iliaa Exp $ */ #ifndef PHP_IMAGE_H #define PHP_IMAGE_H @@ -46,6 +46,7 @@ IMAGE_FILETYPE_JB2, IMAGE_FILETYPE_SWC, IMAGE_FILETYPE_IFF, + IMAGE_FILETYPE_WBMP, /* WHEN EXTENDING: PLEASE ALSO REGISTER IN image.c:PHP_MINIT_FUNCTION(imagetypes) */ } image_filetype; /* }}} */ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php