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

Java 如何使用CCITT T.4技术生成透明背景图像的tiff图像,java,bufferedimage,transparent,tiff,Java,Bufferedimage,Transparent,Tiff,我有一个手写文本作为缓冲区图像对象。我需要使用CCITT T.4压缩技术将其生成为tiff图像文件 但CCITT T.4要求图像为1位深度图像。我在BuffereImage中的图像深度为32位。当我使用将其转换为1位时,黑色手写消失,整个图像变为黑色 我在别处读到,由于1位图像是黑白的,所以在转换为1位时,它将透明层位转换为黑色。我的手写笔记也是黑色的,所以整个图像变成了黑色 我能够使用LZW技术生成tiff,没有问题。即使使用CCITT T.4,也只能在24位图像上使用。当图像为32位(带有额

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

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

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

我能够使用LZW技术生成tiff,没有问题。即使使用CCITT T.4,也只能在24位图像上使用。当图像为32位(带有额外的透明层)时,图像将变为黑色。
谁能指导我如何将图像转换为CCITT T.4格式的图像与透明度

多亏了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);

在转换之前,您是否尝试过将图像置于白色背景上?如果您的图像是透明的黑色文本,您还可以使用正确的Porter/Duff模式在文本“后面”绘制一个完全不透明的白色矩形(我认为它是
dstop
,请参见
AlphaComposite
class).我添加了AlphaComposite.dstop,然后使用setPaint White和fillrect方法将背景设置为白色,现在它可以工作了。非常感谢!然而,上面的黑色手写文字仍然不是连续的线条。这些线以虚线的形式出现。你知道如何平滑线条吗?不完全确定
convert1()
方法是如何工作的(我也没有你的手写图像),所以我只是猜测。通常,您可以调整阈值,使更多或更少的像素变黑。或者您可以尝试使用调整亮度/对比度。