【问题标题】:JPEG in TIFF encodingTIFF 编码中的 JPEG
【发布时间】:2011-07-20 10:33:01
【问题描述】:

我执行以下步骤:

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 编码仅支持 8 位样本 es 和每个像素 1(灰度)或 3(RGB 或 YCbCr)样本。

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

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

谢谢。

【问题讨论】:

    标签: java jpeg tiff jai


    【解决方案1】:

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

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

    【讨论】:

    • 它有效,非常感谢。但是我的jpg文件还是太大了,有没有办法获得更多的压缩?谢谢。
    • JPEG 不适合纯黑白图片,尤其是高分辨率图片。使用 TIFF 有什么问题? PNG 可能会提供更好的压缩(即使它使用无损压缩)。
    • 我需要模拟一个扫描仪软件,该软件制作了一个非常压缩的 jpg (b/w),我需要编写相同格式的文件。事实上,正如你所说,tiff 具有正确的压缩大小,但我需要为 jpeg 格式获得相同的大小。谢谢。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      相关资源
      最近更新 更多