JPEG格式的TIFF编码

时间:2011-07-20 10:33:02

标签: java jpeg tiff jai

我这样做了:

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

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

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

THX。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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