if the channdesc is not CY, then the calculated size in png is wrong by a factor of the number of bytes per pixel. a more invasive but perhaps better patch would create a function chantobpp and use that where required. Reference: /n/sources/patch/applied/pngsize Date: Sun Aug 9 02:32:11 CES 2009 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/jpg/png.c Sun Aug 9 02:29:50 2009 +++ /sys/src/cmd/jpg/png.c Sun Aug 9 02:29:49 2009 @@ -214,6 +214,20 @@ if(nineflag){ chantostr(buf, outchan); len = (c->r.max.x - c->r.min.x) * (c->r.max.y - c->r.min.y); + switch(c->chandesc){ + case CY: + len *= 1; + break; + case CYA16: + len *= 2; + break; + case CRGB24: + len *= 3; + break; + case CRGBA32: + len *= 4; + break; + } if(c->chanlen != len) fprint(2, "%s: writing %d bytes for len %ld chan %s\n", argv0, c->chanlen, len, buf);