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