helly           Sun Jun 15 16:00:09 2003 EDT

  Modified files:              
    /php4/ext/gd        gd.c gd_ctx.c php_gd.h 
    /php4/ext/gd/libgd  gd.h xbm.c 
  Log:
  Add ImageXBM
  
Index: php4/ext/gd/gd.c
diff -u php4/ext/gd/gd.c:1.273 php4/ext/gd/gd.c:1.274
--- php4/ext/gd/gd.c:1.273      Sun Jun 15 11:22:09 2003
+++ php4/ext/gd/gd.c    Sun Jun 15 16:00:08 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd.c,v 1.273 2003/06/15 15:22:09 andrey Exp $ */
+/* $Id: gd.c,v 1.274 2003/06/15 20:00:08 helly Exp $ */
 
 /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
    Cold Spring Harbor Labs. */
@@ -306,6 +306,7 @@
 #if HAVE_GD_BUNDLED
        PHP_FE(imagelayereffect,                                                NULL)
        PHP_FE(imagecolormatch,                                                 NULL)
+       PHP_FE(imagexbm,                                NULL)
 #endif
 /* gd filters */
 #ifdef HAVE_GD_BUNDLED
@@ -1780,6 +1781,16 @@
        }
        RETURN_TRUE;
 }
+/* }}} */
+
+/* {{{ proto int imagexbm(int im, string filename [, int foreground])
+   Output XBM image to browser or file */
+#if HAVE_GD_BUNDLED
+PHP_FUNCTION(imagexbm)
+{
+       _php_image_output_ctx(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, 
"XBM", gdImageXbmCtx);
+}
+#endif
 /* }}} */
 
 #ifdef HAVE_GD_GIF_CREATE
Index: php4/ext/gd/gd_ctx.c
diff -u php4/ext/gd/gd_ctx.c:1.16 php4/ext/gd/gd_ctx.c:1.17
--- php4/ext/gd/gd_ctx.c:1.16   Tue Mar 11 23:15:28 2003
+++ php4/ext/gd/gd_ctx.c        Sun Jun 15 16:00:08 2003
@@ -1,5 +1,24 @@
-#include "php_gd.h"
+/*
+   +----------------------------------------------------------------------+
+   | PHP Version 4                                                        |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2003 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 3.0 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_0.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          |
+   | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Authors: Stanislav Malyshev <[EMAIL PROTECTED]>                           |
+   +----------------------------------------------------------------------+
+ */
+
+/* $Id: gd_ctx.c,v 1.17 2003/06/15 20:00:08 helly Exp $ */
 
+#include "php_gd.h"
 
 #define CTX_PUTC(c,ctx) ctx->putC(ctx, c)
        
@@ -21,7 +40,8 @@
                efree(ctx);
        }
 }
-       
+
+/* {{{ _php_image_output_ctx */        
 static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char 
*tn, void (*func_p)()) 
 {
        zval **imgind, **file, **quality;
@@ -32,8 +52,14 @@
        int q = -1, i;
        gdIOCtx *ctx;
 
-       /* The quality parameter for Wbmp stands for the threshold when called from 
image2wbmp() */
+       /* The third (quality) parameter for Wbmp stands for the threshold when called 
from image2wbmp().
+        * The third (quality) parameter for Wbmp and Xbm stands for the foreground 
color index when called
+        * from imagey<type>().
+        */
        
+       if (argc < 2 && image_type == PHP_GDIMG_TYPE_XBM) {
+               WRONG_PARAM_COUNT;
+       }
        if (argc < 1 || argc > 3 || zend_get_parameters_ex(argc, &imgind, &file, 
&quality) == FAILURE) 
        {
                WRONG_PARAM_COUNT;
@@ -46,7 +72,7 @@
                fn = Z_STRVAL_PP(file);
                if (argc == 3) {
                        convert_to_long_ex(quality);
-                       q = Z_LVAL_PP(quality);
+                       q = Z_LVAL_PP(quality);/* or colorindex for foreground of BW 
images (defaults to black) */
                }
        }
 
@@ -88,11 +114,19 @@
                case PHP_GDIMG_TYPE_JPG:
                        (*func_p)(im, ctx, q);
                        break;
+               case PHP_GDIMG_TYPE_XBM:
                case PHP_GDIMG_TYPE_WBM:
-                       for(i=0; i < gdImageColorsTotal(im); i++) {
-                               if(gdImageRed(im, i) == 0) break;
-                       } 
-                       (*func_p)(im, i, ctx);
+                       if (argc < 3) {
+                               for(i=0; i < gdImageColorsTotal(im); i++) {
+                                       if(!gdImageRed(im, i) && !gdImageGreen(im, i) 
&& !gdImageBlue(im, i)) break;
+                               }
+                               q = i;
+                       }
+                       if (image_type == PHP_GDIMG_TYPE_XBM) {
+                               (*func_p)(im, fn, q, ctx);
+                       } else {
+                               (*func_p)(im, q, ctx);
+                       }
                        break;
                default:
                        (*func_p)(im, ctx);
@@ -112,3 +146,13 @@
        
     RETURN_TRUE;
 }
+/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
Index: php4/ext/gd/php_gd.h
diff -u php4/ext/gd/php_gd.h:1.55 php4/ext/gd/php_gd.h:1.56
--- php4/ext/gd/php_gd.h:1.55   Tue Jun 10 16:03:29 2003
+++ php4/ext/gd/php_gd.h        Sun Jun 15 16:00:08 2003
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_gd.h,v 1.55 2003/06/10 20:03:29 imajes Exp $ */
+/* $Id: php_gd.h,v 1.56 2003/06/15 20:00:08 helly Exp $ */
 
 #ifndef PHP_GD_H
 #define PHP_GD_H
@@ -175,6 +175,7 @@
 PHP_FUNCTION(imagelayereffect);
 PHP_FUNCTION(imagecolormatch);
 PHP_FUNCTION(imagefilter);
+PHP_FUNCTION(imagexbm);
 #endif
 
 PHP_GD_API int phpi_get_le_gd(void);
Index: php4/ext/gd/libgd/gd.h
diff -u php4/ext/gd/libgd/gd.h:1.17 php4/ext/gd/libgd/gd.h:1.18
--- php4/ext/gd/libgd/gd.h:1.17 Tue Apr  8 21:55:48 2003
+++ php4/ext/gd/libgd/gd.h      Sun Jun 15 16:00:08 2003
@@ -256,6 +256,7 @@
 gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int 
h);
 
 gdImagePtr gdImageCreateFromXbm(FILE *fd);
+void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out);
 
 gdImagePtr gdImageCreateFromXpm (char *filename);
 
Index: php4/ext/gd/libgd/xbm.c
diff -u php4/ext/gd/libgd/xbm.c:1.3 php4/ext/gd/libgd/xbm.c:1.4
--- php4/ext/gd/libgd/xbm.c:1.3 Tue Jun 10 16:03:29 2003
+++ php4/ext/gd/libgd/xbm.c     Sun Jun 15 16:00:08 2003
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: xbm.c,v 1.3 2003/06/10 20:03:29 imajes Exp $ */
+/* $Id: xbm.c,v 1.4 2003/06/15 20:00:08 helly Exp $ */
 
 #include <stdio.h>
 #include <math.h>
@@ -29,8 +29,8 @@
 
 #define MAX_XBM_LINE_SIZE 255
 
-gdImagePtr
-gdImageCreateFromXbm (FILE * fd)
+/* {{{ gdImagePtr gdImageCreateFromXbm */
+gdImagePtr gdImageCreateFromXbm(FILE * fd)
 {
        char fline[MAX_XBM_LINE_SIZE];
        char iname[MAX_XBM_LINE_SIZE];
@@ -151,3 +151,89 @@
        gdImageDestroy(im);
        return 0;
 }
+/* }}} */
+
+/* {{{ gdCtxPrintf */
+void gdCtxPrintf(gdIOCtx * out, const char *format, ...)
+{
+       char *buf;
+       int len;
+       va_list args;
+       
+       va_start(args, format);
+       len = vspprintf(&buf, 0, format, args);
+       va_end(args);
+       out->putBuf(out, buf, len);
+       efree(buf);
+}
+/* }}} */
+
+/* {{{ gdImageXbmCtx */
+void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out)
+{
+       int x, y, c, b, sx, sy, p;
+       char *name, *f;
+       size_t i, l;
+
+       name = file_name;
+       if ((f = strrchr(name, '/')) != NULL) name = f+1;
+       if ((f = strrchr(name, '\\')) != NULL) name = f+1;
+       name = estrdup(name);
+       if ((f = strrchr(name, '.')) != NULL && !strcasecmp(f, ".XBM")) *f = '\0';
+       if ((l = strlen(name)) == 0) {
+               efree(name);
+               name = estrdup("image");
+       } else {
+               for (i=0; i<l; i++) {
+                       /* only in C-locale isalnum() would work */
+                       if (!isupper(name[i]) && !islower(name[i]) && 
!isdigit(name[i])) {
+                               name[i] = '_';
+                       }
+               }
+       }
+
+       gdCtxPrintf(out, "#define %s_width %d\n", name, gdImageSX(image));
+       gdCtxPrintf(out, "#define %s_height %d\n", name, gdImageSY(image));
+       gdCtxPrintf(out, "static unsigned char %s_bits[] = {\n  ", name);
+
+       efree(name);
+
+       b = 1;
+       p = 0;
+       c = 0;
+       sx = gdImageSX(image);
+       sy = gdImageSY(image);
+       for (y = 0; y < sy; y++) {
+               for (x = 0; x < sx; x++) {
+                       if (gdImageGetPixel(image, x, y) == fg) {
+                               c |= b;
+                       }
+                       if ((b == 128) || (x == sx && y == sy)) {
+                               b = 1;
+                               if (p) {
+                                       gdCtxPrintf(out, ", ");
+                                       if (!(p%12)) {
+                                               gdCtxPrintf(out, "\n  ");
+                                               p = 12;
+                                       }
+                               }
+                               p++;
+                               gdCtxPrintf(out, "0x%02X", c);
+                               c = 0;
+                       } else {
+                               b <<= 1;
+                       }
+               }
+       }
+       gdCtxPrintf(out, "};\n");
+}
+/* }}} */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to