Как создать мозаичный TIFF из пирамиды из изображения JPEG без потерь - PullRequest
0 голосов
/ 29 июля 2011

Мне нужно создать TIFF-файл с мозаичной плиткой с JPEG-сжатыми плитками из большого изображения JPEG, используя операции без потерь в формате jpeg, т.е. обрезку в jpegtran.Есть ли какой-нибудь инструмент или java-код для выполнения такой операции?

В настоящее время я использую свой Java-код для создания мозаичной TIFF, но это происходит с потерями:

public static void writeTiff(RenderedOp src, File dstFile, float jpegQuality, int tileSize, int pyramid, String interpolation) throws IOException {
    dstFile.getParentFile().mkdirs();
    TIFFImageWriterSpi imageWriterSpi = new TIFFImageWriterSpi();
    TIFFImageWriter imageWriter = (TIFFImageWriter)imageWriterSpi.createWriterInstance();
    ImageOutputStream out = new FileImageOutputStream(dstFile);
    try {
        imageWriter.setOutput(out);
        imageWriter.prepareWriteSequence(null);
        BufferedImage img = null;
        for(int i=0; i<pyramid; i++) {
            img = img==null ? src.getAsBufferedImage() : JAIUtils.scale(img, 0.5F, interpolation).getAsBufferedImage();
            TIFFImageWriteParam imageWriteParam = (TIFFImageWriteParam)imageWriter.getDefaultWriteParam();
            if (tileSize>0 && (img.getWidth()>tileSize || img.getHeight()>tileSize)) {
                imageWriteParam.setTilingMode(ImageWriteParam.MODE_EXPLICIT);
                imageWriteParam.setTiling(tileSize, tileSize, 0, 0);
            }
            if (jpegQuality > 0) {
                imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT );
                imageWriteParam.setCompressionType("JPEG");
                imageWriteParam.setCompressionQuality(jpegQuality);
            }
            imageWriter.writeToSequence(new IIOImage(img, null, null), imageWriteParam );
        }
        imageWriter.endWriteSequence();
    } finally {
        out.close();
    }
}

1 Ответ

0 голосов
/ 29 июля 2011

Ossim хорошо работает из командной строки, но я вижу, что он также имеет привязку JNI .

...