[PHP-CVS] cvs: php4 /ext/standard image.c php_image.h

2003-02-01 Thread Marcus Boerger
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

2003-01-16 Thread Marcus Boerger
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

2003-01-08 Thread Ilia Alshanetsky
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