我正在尝试转换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
答案 0 :(得分:0)
好的,这就是问题所在:
所讨论的PSD是每个样本16位,并使用PackBits压缩。出于某种原因,我没有使用这种特定配置的测试样本,因此很长时间以来都存在一个错误。
对于PackBits压缩的PSD,在文件的开头有一个列的每行的字节数(我想更容易随机访问)。我将此值乘以2表示16位,4表示32位采样,但显然字节计数只是一个字节计数,无论样本是2还是4字节......
现在,当我改变它时,图像被无错误地读取。然而,这个PSD似乎是在没有"合并的情况下存储的。图层(这是大多数声称可以显示PSD的软件),但它有7个通道,其中4个是alpha通道。当我打开它时,它大部分是透明的(在OS X的预览中打开,它全部透明)。
上面的修补程序现在被推送到GitHub上的master分支。