0

我正在尝试转换产生此异常的 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

4

1 回答 1

0

好的,那么问题来了:

有问题的 PSD 是每个样本 16 位,并使用 PackBits 压缩。出于某种原因,我没有使用这种特定配置的测试样本,所以多年来一直存在错误。

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

现在,当我改变它时,图像被正确读取。然而,这个 PSD 似乎在没有“合并”层的情况下存储(这是大多数声称读取 PSD 的软件能够显示的),但它有 7 个通道,其中 4 个是 alpha 通道。当我打开它时,它几乎是透明的(在 OS X 的预览中打开,它完全透明)。

上述修复现已推送到 GitHub 上的 master 分支。

于 2015-10-01T13:57:39.377 回答