TwelveMonkeys 3.1.1:PSD文件ImageIO.read给出了java.io.EOFException:PackBits流的意外结束

时间:2015-09-29 08:01:20

标签: java twelvemonkeys

我正在尝试转换PSD文件(大小超过500 MB),这会导致此异常:

java.io.EOFException: Unexpected end of PackBits stream
    at com.twelvemonkeys.io.enc.PackBitsDecoder.readFully(Unknown Source)
    at com.twelvemonkeys.io.enc.PackBitsDecoder.decode(Unknown Source)
    at com.twelvemonkeys.io.enc.DecoderStream.fill(Unknown Source)
    at com.twelvemonkeys.io.enc.DecoderStream.read(Unknown Source)
    at java.io.DataInputStream.readShort(DataInputStream.java:313)
    at com.twelvemonkeys.imageio.plugins.psd.PSDImageReader.read16bitChannel(Unknown Source)
    at com.twelvemonkeys.imageio.plugins.psd.PSDImageReader.readImageData(Unknown Source)
    at com.twelvemonkeys.imageio.plugins.psd.PSDImageReader.read(Unknown Source)
    at javax.imageio.ImageIO.read(ImageIO.java:1448)
    at javax.imageio.ImageIO.read(ImageIO.java:1308)

有人可以为此建议一个解决方案吗?或者,至少,它产生这个例外的原因(也许是较新版本的Photoshop?)。

更新

以下是我使用的PSD文件的链接: heavy.psd

1 个答案:

答案 0 :(得分:0)

好的,这就是问题所在:

所讨论的PSD是每个样本16位,并使用PackBits压缩。出于某种原因,我没有使用这种特定配置的测试样本,因此很长时间以来都存在一个错误。

对于PackBits压缩的PSD,在文件的开头有一个列的每行的字节数(我想更容易随机访问)。我将此值乘以2表示16位,4表示32位采样,但显然字节计数只是一个字节计数,无论样本是2还是4字节......

现在,当我改变它时,图像被无错误地读取。然而,这个PSD似乎是在没有"合并的情况下存储的。图层(这是大多数声称可以显示PSD的软件),但它有7个通道,其中4个是alpha通道。当我打开它时,它大部分是透明的(在OS X的预览中打开,它全部透明)。

上面的修补程序现在被推送到GitHub上的master分支。