Потеря качества после сжатия с использованием Twelvemonkeys в JAVA и выделения будут удалены - PullRequest
0 голосов
/ 16 марта 2020

Я преобразовываю входной файл (PDF, TIFF) в выходной (TIFF) файл, используя PDFBox (PDF в BufferedImage) и использую двенадцать обезьян для преобразования буферизованного изображения в файл Tiff путем изменения размера с помощью Imagewriter с IIOImage. Файл конвертируется, но теряет качество изображения. А после того, как изменил тип изображения BufferedImage.TYPE_BYTE_GRAY на BufferedImage.TYPE_BYTE_BINARY, мои текстовые маркеры для файла потерялись.

Ниже приведен код, который используется. Как преобразовать изображение без потери качества?

Я конвертирую размер файла изображения 1648 * 2338 с разрешением 200 точек на дюйм, и я хотел установить интерпретацию фотометрии c на 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();
...