-Edit- FYI .. Я конвертирую b & w документы, отсканированные как оттенки серого или цвета.Преобразование PNG в bitonal TIFF
1) Первое решение работает, оно просто обращено черным & белый (черный фон, белый текст). Это также заняло около 10 минут.
2) Решение JAI во втором ответе не сработало для меня. Я попробовал это перед публикацией здесь.
Кто-нибудь работал с другими библиотеками бесплатно или платил за манипуляции с изображениями?
-Original- Я пытаюсь преобразовать PNG в битонный TIFF с помощью Java ImageIO. Неужели кому-то удавалось это сделать? Я получил его для преобразования из PNG в TIFF. Я не уверен, что мне нужно преобразовать BufferedImage (PNG), который я читал или конвертировал в TIFF, когда я его пишу. Я искал и искал, но ничего не работает? Есть ли у кого-нибудь предложения, где искать?
Вот код, который преобразует ...
public static void test() throws IOException {
String fileName = "4848970_1";
// String fileName = "color";
String inFileType = ".PNG";
String outFileType = ".TIFF";
File fInputFile = new File("I:/HPF/UU/" + fileName + inFileType);
InputStream fis = new BufferedInputStream(new FileInputStream(fInputFile));
ImageReaderSpi spi = new PNGImageReaderSpi();
ImageReader reader = spi.createReaderInstance();
ImageInputStream iis = ImageIO.createImageInputStream(fis);
reader.setInput(iis, true);
BufferedImage bi = reader.read(0);
int[] xi = bi.getSampleModel().getSampleSize();
for (int i : xi) {
System.out.println("bitsize " + i);
}
ImageWriterSpi tiffspi = new TIFFImageWriterSpi();
TIFFImageWriter writer = (TIFFImageWriter) tiffspi.createWriterInstance();
// TIFFImageWriteParam param = (TIFFImageWriteParam) writer.getDefaultWriteParam();
TIFFImageWriteParam param = new TIFFImageWriteParam(Locale.US);
String[] strings = param.getCompressionTypes();
for (String string : strings) {
System.out.println(string);
}
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionType("LZW");
File fOutputFile = new File("I:\\HPF\\UU\\" + fileName + outFileType);
OutputStream fos = new BufferedOutputStream(new FileOutputStream(fOutputFile));
ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
writer.setOutput(ios);
writer.write(null, new IIOImage(bi, null, null), param);
ios.flush();
writer.dispose();
ios.close();
}
Я попытался изменить сжатие, как кажется, что я хочу, чтобы напечатать «CCITT T.6», но я получаю сообщение об ошибке "Bits для каждого образца должно быть 1 для сжатия T6! »Любое предложение было бы оценено.
Все это отсканированные документы. – CFreiner