On December 3, 2002 02:13 pm, Marcus Börger wrote: > Ah great now it waorks! > Should we add a test for ImageGd() then, verify it isn't a true color > image? And what about MFH?
Adding a test for truecolor inside imageGd code seems like the best choice, that code was not designed with truecolor images in mind and is mostly a leftover from 1.X code, the maintained gd format is gd2. So, I am +1 on the idea (I'll implement it shortly). I s'pose we need to MFH this as well, I was mostly waiting for additional feedback before proceeding. Ilia P.S. I will also try to write a small test suit to test various format conversions, so if you have any suggestions, test cases and so on, please let me know. > > marcus > > At 16:43 03.12.2002, Ilia Alshanetsky wrote: > >iliaa Tue Dec 3 10:43:18 2002 EDT > > > > Modified files: > > /php4/ext/gd/libgd gd_gd2.c gd_png.c > > Log: > > Fixed a crash that occurs during the last step of png/jpeg -> gd2 -> > > png/jpeg > > conversion. The same crash still occures with png/jpeg -> gd -> > > png/jpeg, because > > apparently gd format cannot handle truecolor images. > > Turned off debug messages inside gd_gd2.c. > > > > > >Index: php4/ext/gd/libgd/gd_gd2.c > >diff -u php4/ext/gd/libgd/gd_gd2.c:1.8 php4/ext/gd/libgd/gd_gd2.c:1.9 > >--- php4/ext/gd/libgd/gd_gd2.c:1.8 Sun Dec 1 06:43:54 2002 > >+++ php4/ext/gd/libgd/gd_gd2.c Tue Dec 3 10:43:17 2002 > >@@ -25,8 +25,8 @@ > > > > /* Use this for commenting out debug-print statements. */ > > /* Just use the first '#define' to allow all the prints... */ > >-#define GD2_DBG(s) (s) > >-//#define GD2_DBG(s) > >+/* #define GD2_DBG(s) (s) */ > >+#define GD2_DBG(s) > > > > typedef struct > > { > >@@ -184,7 +184,7 @@ > > goto fail1; > > } > > > >- im = gdImageCreate (*sx, *sy); > >+ im = gdImageCreateTrueColor(*sx, *sy); > > if (im == NULL) > > { > > GD2_DBG(php_gd_error("Could not create gdImage\n")); > >@@ -393,7 +393,7 @@ > > int r = chunkBuf[chunkPos++] << 16; > > int g = chunkBuf[chunkPos++] << 8; > > int b = chunkBuf[chunkPos++]; > >- im->pixels[y][x] = a + r + g + b; > >+ im->tpixels[y][x] = a + r + g + b; > > } > > else > > { > >@@ -818,10 +818,10 @@ > > { > > for (x = xlo; x < xhi; x++) > > { > >- int p = im->pixels[y][x]; > > GD2_DBG(php_gd_error("%d...",x)); > > if (im->trueColor) > > { > >+ int p = im->tpixels[y][x]; > > chunkData[chunkLen++] = gdTrueColorGetAlpha > > (p); chunkData[chunkLen++] = gdTrueColorGetRed (p); chunkData[chunkLen++] > > = gdTrueColorGetGreen (p); @@ -829,7 +829,7 @@ > > } > > else > > { > >- chunkData[chunkLen++] = p; > >+ chunkData[chunkLen++] = im->pixels[y][x]; > > } > > }; > > } > >Index: php4/ext/gd/libgd/gd_png.c > >diff -u php4/ext/gd/libgd/gd_png.c:1.8 php4/ext/gd/libgd/gd_png.c:1.9 > >--- php4/ext/gd/libgd/gd_png.c:1.8 Sun Dec 1 06:43:54 2002 > >+++ php4/ext/gd/libgd/gd_png.c Tue Dec 3 10:43:17 2002 > >@@ -667,20 +667,10 @@ > > /* Our little 7-bit alpha channel trick costs us a bit here. */ > > png_bytep *row_pointers; > > row_pointers = gdMalloc (sizeof (png_bytep) * height); > >- if (row_pointers == NULL) > >- { > >- php_gd_error("gd-png error: unable to allocate row_pointers\n"); > >- } > > for (j = 0; j < height; ++j) > > { > > int bo = 0; > >- if ((row_pointers[j] = (png_bytep) gdMalloc (width * channels)) > >== NULL) > >- { > >- php_gd_error("gd-png error: unable to allocate rows\n"); > >- for (i = 0; i < j; ++i) > >- gdFree (row_pointers[i]); > >- return; > >- } > >+ row_pointers[j] = (png_bytep) gdMalloc (width * channels); > > for (i = 0; i < width; ++i) > > { > > unsigned char a; > >@@ -714,20 +704,10 @@ > > { > > png_bytep *row_pointers; > > row_pointers = gdMalloc (sizeof (png_bytep) * height); > >- if (row_pointers == NULL) > >- { > >- php_gd_error("gd-png error: unable to allocate > > row_pointers\n"); - } > > for (j = 0; j < height; ++j) > > { > >- if ((row_pointers[j] = (png_bytep) gdMalloc (width)) == > > NULL) - { > >- php_gd_error("gd-png error: unable to allocate rows\n"); > >- for (i = 0; i < j; ++i) > >- gdFree (row_pointers[i]); > >- return; > >- } > >- for (i = 0; i < width; ++i) > >+ row_pointers[j] = (png_bytep) gdMalloc (width); > >+ for (i = 0; i < width; ++i) > > row_pointers[j][i] = mapping[im->pixels[j][i]]; > > } > > > > > > > > > >-- > >PHP CVS Mailing List (http://www.php.net/) > >To unsubscribe, visit: http://www.php.net/unsub.php -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php