Looking at the spec, I don't think that the png transparency decoder is within spec. Specifically, the int version.

> For color type 3 (indexed color), the tRNS chunk contains a series of one-byte alpha values, corresponding to entries in the PLTE chunk:

>    Alpha for palette index 0:  1 byte
>    Alpha for palette index 1:  1 byte
>    ...etc...

> Each entry indicates that pixels of the corresponding palette index must be treated as having the specified alpha value. Alpha values have the same interpretation as in an 8-bit full alpha channel: 0 is fully transparent, 255 is fully opaque, regardless of image bit depth. The tRNS chunk must not contain more alpha values than there are palette entries, but tRNS can contain fewer values than there are palette entries. In this case, the alpha value for all remaining palette entries is assumed to be 255. In the common case in which only palette index 0 need be made transparent, only a one-byte tRNS chunk is needed. 

Say we have a PNG where we have two colors that need to be transparent. We're going to pick up the first one, then assume that everything else is fully opaque. We're only ever going to pickup the bytes/string version if we get a transparency where nothing is fully transparent, but something is partially transparent.