Images from our website do not display in Safari for some Mac users and they report seeing either no image or a black image. Here is an example:
http://s3-eu-west-2.amazonaws.com/bp18.boxcleverpress.com/Boxclever_logo_chartreuse.png
What I have discovered is:
- Images display on PC
- Images display on SOME Macs (I have an older one that is OK)
- Images display on iPhones and iPads
- Images are PNG
- I have optimised the images with pngtastic
- When images are copied to the Mac and opened with Adobe Photoshop they give the error: the file format module cannot parse the file
- When I tried to open a pngtastic optimised file in Photoshop Elements on Windows I also get that error
- When I tried to open the optimised file in Photoshop on Windows I get the error IDAT: incorrect data check
I will replace the optimised images with unoptimised ones but I am not sure if this problem is with pngtastic or Adobe image libraries or something else.
The problem lies in
Zopfli.java, included by pngtastic.It uses this Java code to calculate the Adler-32 checksum:
However,
bytes in Java are always signed, and so it may return a wrong checksum value for some data inputs. Also, the bareintdeclarations fors1ands2cause further complications.With (my C version of) the same code and
dataexplicitly declared assigned charand boths1ands2assigned int, I get a wrong checksumFFFF9180– exactly the one in your damaged PNG.If I change the declaration to use
unsigned charandunsigned int, it returns the correct checksum1BCD6EB2again.The original C code for the Adler-32 checksum in zopfli uses
unsignedtypes throughout, so it's just the Java implementation that suffers from this.