Image processing 在JAVA和Highlighter中使用Twelvemonkeys进行压缩后,质量损失被删除

Image processing 在JAVA和Highlighter中使用Twelvemonkeys进行压缩后,质量损失被删除,image-processing,pdfbox,javax.imageio,image-conversion,twelvemonkeys,Image Processing,Pdfbox,Javax.imageio,Image Conversion,Twelvemonkeys,我正在使用PDFBox(PDF到BuffereImage)将输入文件(PDF,TIFF)转换为输出(TIFF)文件,并使用12只猴子通过使用Imagewriter和IIOImage调整大小将缓冲图像转换为TIFF文件。 文件正在转换,但图像质量下降。将imagetype BuffereImage.TYPE_BYTE_GRAY更改为BuffereImage.TYPE_BYTE_BINARY后,文件上的我的文本高亮显示丢失 下面是使用的代码。如何转换图像而不丢失质量 我正在用200 dpi转换图像文

我正在使用PDFBox(PDF到BuffereImage)将输入文件(PDF,TIFF)转换为输出(TIFF)文件,并使用12只猴子通过使用Imagewriter和IIOImage调整大小将缓冲图像转换为TIFF文件。 文件正在转换,但图像质量下降。将imagetype BuffereImage.TYPE_BYTE_GRAY更改为BuffereImage.TYPE_BYTE_BINARY后,文件上的我的文本高亮显示丢失

下面是使用的代码。如何转换图像而不丢失质量

我正在用200 dpi转换图像文件大小1648*2338,我想将光度解释设置为min_is_white,但无法解决我的问题

File inputFile = new File(inputImagePath);
BufferedImage inputImage = ImageIO.read(inputFile);

final int imageType = BufferedImage.TYPE_BYTE_BINARY;

// creates output image
BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight,imageType);

// scales the input image to the output image
Graphics2D g2d = outputImage.createGraphics();
g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
g2d.dispose();

// writes to output file                    
final List<Entry> entries =new ArrayList<Entry>();
entries.add(new TIFFEntry(TIFF.TAG_X_RESOLUTION, new Rational(200)));
entries.add(new TIFFEntry(TIFF.TAG_Y_RESOLUTION, new Rational(200)));
entries.add(new TIFFEntry(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, TIFF.TYPE_SHORT, 0));
final IIOMetadata tiffImageMetadata =new TIFFImageMetadata(entries);

ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
FileImageOutputStream fio = new FileImageOutputStream(new File(outputImagePath));
ImageWriteParam params = writer.getDefaultWriteParam();
params.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
fio.setByteOrder(ByteOrder.LITTLE_ENDIAN);
IIOMetadata metadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(outputImage), params);


writer.setOutput(fio);

IIOImage iioimage = new IIOImage(outputImage, null, tiffImageMetadata);

writer.write(null, iioimage, params);
fio.close();
writer.dispose();
File inputFile=新文件(inputImagePath);
BuffereImage inputImage=ImageIO.read(inputFile);
final int imageType=BufferedImage.TYPE_BYTE_BINARY;
//创建输出图像
BuffereImage outputImage=新的BuffereImage(缩放宽度、缩放高度、图像类型);
//将输入图像缩放到输出图像
Graphics2D g2d=outputImage.createGraphics();
g2d.drawImage(inputImage,0,0,scaledWidth,scaledHeight,null);
g2d.dispose();
//写入输出文件
最终列表条目=新的ArrayList();
添加(新的TIFFEntry(TIFF.TAG_X_分辨率,新的Rational(200));
添加(新的TIFF条目(TIFF.TAG__Y_分辨率,新的Rational(200));
条目.add(新的TIFF条目(TIFF.TAG\u光度学解释,TIFF.TYPE\u SHORT,0));
最终IIOMetadata tiffImageMetadata=新的tiffImageMetadata(条目);
ImageWriter writer=ImageIO.getImageWritersByFormatName(“tiff”).next();
FileImageOutputStream fio=新FileImageOutputStream(新文件(outputImagePath));
ImageWriteParam参数=writer.getDefaultWriteParam();
参数setCompressionMode(ImageWriteParam.MODE_显式);
fio.setByteOrder(字节顺序、小字节顺序);
IIOMetadata metadata=writer.getDefaultImageMetadata(新的ImageTypeSpecifier(outputImage),参数);
writer.setOutput(fio);
IIOImage IIOImage=新IIOImage(outputImage,null,tiffImageMetadata);
writer.write(null,iioimage,params);
fio.close();
writer.dispose();

这有点混乱,您将分辨率设置为300和200?!为什么不直接在PDFBox中使用200渲染图像?是的,当转换成黑白时,它会丢失一些东西。黄色很可能是白色。我看不出您在哪里设置压缩,ImageIOUtils.writeImage()将设置最好的压缩(G4用于黑白图像)。删除了未使用的TiffUtil代码,是否有其他可能将文件从pdf转换为tiff或tiff转换为tiff。我们不使用ImageIOUtils,因为它不支持将文件转换为tiff,它只支持jpeg或png文件格式。如果我错了,请更正我。使用Jai和PDFBox没有任何效果。使用的Java版本1.8ImageIOUtils不支持TIFF。您的类路径中需要有一个TIFF编写器,来自twelvemonkeys或jai,请参见/。首先,“质量损失”发生在您自己的转换中。正如蒂尔曼所说,只使用黑白,你会失去颜色。。。这不应该令人惊讶。其次,您不在代码中设置压缩(您只设置压缩模式,这允许您稍后设置)。您是否打算通过
参数指定
“CCITT.6”
(也称为第4组)?最后,Java2D标准图像类型是“黑色为零”。如果要输出“白色为零”,则需要。另一方面,如果要保留高光,则需要使用索引颜色模型(
photommetricinterpretation:3/palete
在TIFF speak中)或真彩色。或者,如果这是一个选项或者您需要黑白,则可以使用反转文本保持高亮显示为黑色。