2

我执行以下步骤:

TIFFEncodeParam tep = new TIFFEncodeParam();

tep.setCompression(TIFFEncodeParam.COMPRESSION_JPEG_TTN2);

BufferedImage buff = new BufferedImage(newimage.getWidth(null),
                                                   newimage.getHeight(null),
                                                   BufferedImage.TYPE_BYTE_BINARY);
//newimage is an awt image

buff.createGraphics().drawImage(newimage, 0,0,null);

ParameterBlock outPB = new ParameterBlock();

outPB.addSource(buff);
outPB.add("myjpegfile.jpg");
outPB.add("tiff");
outPB.add(tep);

PlanarImage outPI = JAI.create("filestore",outPB);

在这里我得到:java.lang.Error: JPEG-in-TIFF encoding 仅支持 8 位样本和每个像素 1 个(灰度)或 3 个(RGB 或 YCbCr)样本。

这是因为我需要在 jpeg 文件中对单色图像进行最大压缩。我可以写 tiff (24Kb) 和 jpeg (212Kb)(A4 页面大小 200dpi BW),但 jpeg 太大了。

这个错误是什么意思?什么是 8 位样本?

谢谢。

4

2 回答 2

3

这意味着 JPEG-in-TIFF 仅支持 8 位灰度(= 1 个样本,每像素 8 位)或 24 位彩色图像(= 3 样本,每像素 8 位)。

TYPE_BYTE_BINARY 表示黑白图片(= 1 个样本,每像素 1 位)。您想改用 TYPE_BYTE_GRAY 。

于 2011-07-20T11:30:46.087 回答
1

没有像 B&W jpg 这样的东西,假设 B&W 是指每像素 1 位的图像,每个像素要么是黑色,要么是白色。通常,当您将黑白扫描转换为灰度然后使用 JPEG 压缩保存时,它比以 TIFF 或 PNG 等压缩格式保存原始黑白图像要大得多。黑白扫描中小的锐利单色边缘是 JPEG 压缩的最糟糕的事情。

您应该重新检查您尝试复制的文件并更好地了解其实际格式。也许它是一个 JBIG2 文件?这是一种非常有效的黑白压缩格式。

我见过的另一种可能性是,您有一个扩展名为“jpg”的文件,该文件实际上是 TIFF 或 PNG 格式。查看文件的前几个字节并使用该签名来识别文件的格式,例如此处。如果是 JPEG,请使用Calvin Hass的JPEGsnoop之类的程序获取更多详细信息。(没有私人关系,我只是一个快乐的用户。)如果它实际上是 TIFF,您可以使用Aware Systems的AsTiffTagViewer获得更多详细信息。

于 2013-04-08T14:03:58.400 回答