如何使用CCITT T.4技术为具有透明背景的图像生成tiff图像

时间:2015-10-29 12:29:22

标签: java bufferedimage transparent tiff

我有一个手写文本作为BufferedImage对象。我需要使用CCITT T.4压缩技术将其生成为tiff图像文件。

但CCITT T.4要求图像为1位深度图像。我在BufferedImage中的图像是32位深度。当我使用convert1() funtion将其转换为1位时,黑色手写会消失,整个图像变黑。

我在别处读到,因为1位图像是黑色和白色,所以在转换为1位时,它将透明层位转换为黑色。我的手写笔记也是黑色,因此整个图像变黑。

我能够使用LZW技术来解决问题。甚至使用CCITT T.4,但仅限于24位图像。当图像为32位(具有额外的透明层)时,图像变为黑色。 任何人都可以指导我如何将图像转换为CCITT T.4格式的透明图像。

1 个答案:

答案 0 :(得分:1)

感谢来自haraldK的宝贵指针,我能够将32位TIF图像转换为1位图像并使用CCiTT T.4压缩进行压缩。生成的图像清晰,并且没有中断。

这是我修改过的代码:

BufferedImage image32bit; 
//image32bit is populated

Graphics2D g=(Graphics2D)image.createGraphics(); 

AlphaComposite ac=AlphaComposite.getInstance(AlphaComposite.DST_ATOP,0.85f);
//0.85f is the opacity threshold value to make more or less pixels black. 

g.setColor(Color.WHITE);
g.fillRect(0,0,image.getWidth(),image.getHeight());
g.dispose()

//Convert to monochrome 1 bit image using image4j jar - convert1 method
BufferedImage singleBitImage=ConvertUtil.convert1(image32bit);

//Use JAI jar to set compression as CCITT T.4 and write out the image
//Insert code to create writer and writeParam ...
writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
writeParam.setCompressionType("CCITT T.4");

writer.write(null, iioImage, writeParam);