helly Sat Feb 1 20:34:54 2003 EDT
Added files:
/php4/ext/gd/tests conv_test.xbm xbm2png.phpt
/php4/ext/gd/libgd xbm.c
Modified files:
/php4/ext/gd config.m4
/php4/ext/gd/libgd gd.c
Log:
- new xbm support
@Added XBM support for bundled gd library. (marcus)
# It was enabled by the last commit and fixed by this one.
Index: php4/ext/gd/config.m4
diff -u php4/ext/gd/config.m4:1.129 php4/ext/gd/config.m4:1.130
--- php4/ext/gd/config.m4:1.129 Sat Feb 1 18:25:14 2003
+++ php4/ext/gd/config.m4 Sat Feb 1 20:34:54 2003
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config.m4,v 1.129 2003/02/01 23:25:14 helly Exp $
+dnl $Id: config.m4,v 1.130 2003/02/02 01:34:54 helly Exp $
dnl
dnl
@@ -257,7 +257,8 @@
libgd/gd_io_file.c libgd/gd_ss.c libgd/gd_io_ss.c libgd/gd_png.c
libgd/gd_jpeg.c \
libgd/gdxpm.c libgd/gdfontt.c libgd/gdfonts.c libgd/gdfontmb.c
libgd/gdfontl.c \
libgd/gdfontg.c libgd/gdtables.c libgd/gdft.c libgd/gdcache.c
libgd/gdkanji.c \
- libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c libgd/gd_topal.c
libgd/gd_gif_in.c"
+ libgd/wbmp.c libgd/gd_wbmp.c libgd/gdhelpers.c libgd/gd_topal.c
+libgd/gd_gif_in.c \
+ libgd/xbm.c"
dnl check for fabsf and floorf which are available since C99
AC_CHECK_FUNCS(fabsf floorf)
Index: php4/ext/gd/libgd/gd.c
diff -u php4/ext/gd/libgd/gd.c:1.43 php4/ext/gd/libgd/gd.c:1.44
--- php4/ext/gd/libgd/gd.c:1.43 Mon Jan 20 21:10:19 2003
+++ php4/ext/gd/libgd/gd.c Sat Feb 1 20:34:54 2003
@@ -2777,6 +2777,7 @@
}
/* End Rotate function */
+#if MBO_0
gdImagePtr
gdImageCreateFromXbm (FILE * fd)
{
@@ -2902,6 +2903,7 @@
gdImageDestroy (im);
return 0;
}
+#endif /* MBO_0 */
void
gdImagePolygon (gdImagePtr im, gdPointPtr p, int n, int c)
Index: php4/ext/gd/tests/conv_test.xbm
+++ php4/ext/gd/tests/conv_test.xbm
#define conv_test.xbm_width 16
#define conv_test.xbm_height 5
static unsigned char conv_test.xbm_bits[] = {
0x4c, 0x0d, 0x54, 0x15, 0xcc, 0x0d, 0x44, 0x05, 0x44, 0x05};
Index: php4/ext/gd/tests/xbm2png.phpt
+++ php4/ext/gd/tests/xbm2png.phpt
--TEST--
xbm --> png conversion test
--SKIPIF--
<?php
if (!extension_loaded('gd')) {
die("skip gd extension not avaliable.");
}
if (!function_exists("imagepng")) {
die("skip png support unavailable");
}
if (!function_exists("imagecreatefromxbm")) {
die("skip xbm read support unavailable");
}
?>
--FILE--
<?php
$cwd = dirname(__FILE__);
echo "XBM to PNG conversion: ";
echo imagepng(imagecreatefromxbm($cwd . "/conv_test.xbm"), $cwd .
"/test_xbm.png") ? 'ok' : 'failed';
echo "\n";
@unlink($cwd . "/test_xbm.png");
?>
--EXPECT--
XBM to PNG conversion: ok
Index: php4/ext/gd/libgd/xbm.c
+++ php4/ext/gd/libgd/xbm.c
/*
+----------------------------------------------------------------------+
| PHP Version 4 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2003 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 2.02 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available at through the world-wide-web at |
| http://www.php.net/license/2_02.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. |
+----------------------------------------------------------------------+
| Author: Marcus Boerger <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
/* $Id: xbm.c,v 1.1 2003/02/02 01:34:54 helly Exp $ */
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include "gd.h"
#include "gdhelpers.h"
#include "php.h"
#define MAX_XBM_LINE_SIZE 255
gdImagePtr
gdImageCreateFromXbm (FILE * fd)
{
char fline[MAX_XBM_LINE_SIZE];
char iname[MAX_XBM_LINE_SIZE];
char *type;
int value;
unsigned int width = 0, height = 0;
int fail = 0;
int max_bit = 0;
gdImagePtr im;
int bytes = 0, i;
int bit, x = 0, y = 0;
int ch;
char h[8];
unsigned int b;
rewind(fd);
while (fgets(fline, MAX_XBM_LINE_SIZE, fd)) {
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 (!strcmp("height", type)) {
height = (unsigned int) value;
}
} else {
if ( sscanf(fline, "static unsigned char %s = {", iname) == 1
|| sscanf(fline, "static char %s = {", iname) == 1)
{
max_bit = 128;
} else if (sscanf(fline, "static unsigned short %s = {",
iname) == 1
|| sscanf(fline, "static short %s = {", iname)
== 1)
{
max_bit = 32768;
}
if (max_bit) {
bytes = (width * height / 8) + 1;
if (!bytes) {
return 0;
}
if (!(type = strrchr(iname, '_'))) {
type = iname;
} else {
type++;
}
if (!strcmp("bits[]", type)) {
break;
}
}
}
}
if (!bytes || !max_bit) {
return 0;
}
im = gdImageCreate(width, height);
gdImageColorAllocate(im, 255, 255, 255);
gdImageColorAllocate(im, 0, 0, 0);
h[2] = '\0';
h[4] = '\0';
for (i = 0; i < bytes; i++) {
while (1) {
ch = getc(fd);
if (ch == EOF)
{
fail = 1;
break;
}
if (ch == 'x')
{
break;
}
}
if (fail) {
break;
}
/* Get hex value */
if ((ch=getc(fd)) == EOF) break;
h[0] = ch;
if ((ch=getc(fd)) == EOF) break;
h[1] = ch;
if (max_bit == 32768) {
if ((ch=getc(fd)) == EOF) break;
h[2] = ch;
if ((ch=getc(fd)) == EOF) break;
h[3] = ch;
}
sscanf(h, "%x", &b);
for (bit = 1; bit <= max_bit; bit = bit << 1) {
gdImageSetPixel (im, x++, y, (b & bit) ? 1 : 0);
if (x == im->sx)
{
x = 0;
y++;
if (y == im->sy)
{
return im;
}
break;
}
}
}
php_gd_error("EOF before image was complete\n");
gdImageDestroy(im);
return 0;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php