pajoye Wed Jan 14 10:16:15 2009 UTC
Modified files: (Branch: PHP_5_3)
/php-src/ext/gd/libgd gd_png.c
Log:
- [DOC] support for PNG gray levels+ alpha image, loaded as truecolor
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd_png.c?r1=1.17.4.2.2.5.2.2&r2=1.17.4.2.2.5.2.3&diff_format=u
Index: php-src/ext/gd/libgd/gd_png.c
diff -u php-src/ext/gd/libgd/gd_png.c:1.17.4.2.2.5.2.2
php-src/ext/gd/libgd/gd_png.c:1.17.4.2.2.5.2.3
--- php-src/ext/gd/libgd/gd_png.c:1.17.4.2.2.5.2.2 Thu Nov 6 10:14:37 2008
+++ php-src/ext/gd/libgd/gd_png.c Wed Jan 14 10:16:15 2009
@@ -189,7 +189,8 @@
png_read_info(png_ptr, info_ptr); /* read all PNG info up to
image data */
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth,
&color_type, &interlace_type, NULL, NULL);
- if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type ==
PNG_COLOR_TYPE_RGB_ALPHA)) {
+ if ((color_type == PNG_COLOR_TYPE_RGB) || (color_type ==
PNG_COLOR_TYPE_RGB_ALPHA)
+ || color_type == PNG_COLOR_TYPE_GRAY_ALPHA) {
im = gdImageCreateTrueColor((int) width, (int) height);
} else {
im = gdImageCreate((int) width, (int) height);
@@ -225,7 +226,6 @@
}
#endif
-
switch (color_type) {
case PNG_COLOR_TYPE_PALETTE:
png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette);
@@ -251,7 +251,6 @@
}
break;
case PNG_COLOR_TYPE_GRAY:
- case PNG_COLOR_TYPE_GRAY_ALPHA:
/* create a fake palette and check for single-shade
transparency */
if ((palette = (png_colorp) gdMalloc (256 * sizeof
(png_color))) == NULL) {
php_gd_error("gd-png error: cannot allocate
gray palette");
@@ -293,6 +292,9 @@
}
break;
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
+ png_set_gray_to_rgb(png_ptr);
+
case PNG_COLOR_TYPE_RGB:
case PNG_COLOR_TYPE_RGB_ALPHA:
/* gd 2.0: we now support truecolor. See the
comment above
@@ -365,6 +367,7 @@
}
break;
+ case PNG_COLOR_TYPE_GRAY_ALPHA:
case PNG_COLOR_TYPE_RGB_ALPHA:
for (h = 0; h < height; h++) {
int boffset = 0;