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

Reply via email to