Java TIFF编码中的JPEG

Java TIFF编码中的JPEG,java,jpeg,tiff,jai,Java,Jpeg,Tiff,Jai,我执行以下步骤: TIFFEncodeParam tep = new TIFFEncodeParam(); tep.setCompression(TIFFEncodeParam.COMPRESSION_JPEG_TTN2); BufferedImage buff = new BufferedImage(newimage.getWidth(null), newimage.getHeight(n

我执行以下步骤:

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格式的TIFF编码仅支持8位sampl es和每像素1个(灰度)或3个(RGB或YCbCr)采样

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

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

Thx.

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


TYPE_BYTE_BINARY表示黑白图片(=每像素1位的1个样本)。您可能希望使用类型“BYTE”来代替“GRAY”。

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

您应该重新检查要复制的文件,更好地了解其实际格式。可能是JBIG2文件?这是一种B&W压缩格式,效果非常好


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

它可以工作,非常感谢。但我仍然有jpg文件太大,有没有办法获得更多的压缩?对于纯黑白图片,尤其是高分辨率图片,Thx.JPEG不是一种非常适合的格式。使用TIFF有什么问题?PNG可能提供更好的压缩(即使它使用无损压缩)。我需要模拟一个扫描仪软件,它制作了一个非常压缩的jpg(b/w),我需要编写相同格式的文件。事实上,正如您所说,tiff具有正确的压缩大小,但我需要为jpeg格式获得相同的大小。谢谢。