[RESOLVIDO]TIFF Usando JAI

3 respostas
A

Pessoal estou trabalhando com faxes, deste modo são gerado tiff’s de varios modos

1- tiff normal igual a um arquivo jpeg(converto para jpeg)
2 - tiff paginado (corto em varios tiffs)
3 - um tiff corrente com 3 paginas em uma folha grande seria algo entor de de 1024 x 2021(quando converte comprime)

estou usando o JAI para ler e converter para JPEG. esta funcionando para as opções 1 e 2 citadas acima.

na opção 3 ao gerar um jpeg ele comprime mesmo mantendo a mesma resolução tudo em uma folha.
preciso que ele não amasse esse jpeg e mantenha o tamanho real do tiff

se alguem tiver alguma dica ou ajuda para manipular tiff ficarei grato!!!

public static void converterTif(String dirTiff, int largura, int altura, int qualidade, boolean proporcional, String nomeParaConverter) throws IOException {
        File fileTiff = new File(dirTiff);
        SeekableStream seekableStream = new FileSeekableStream(fileTiff);

        ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", seekableStream, null);
        int numPages = decoder.getNumPages();
        RenderedImage images[] = new RenderedImage[numPages];
        for (int i = 0; i < decoder.getNumPages(); i++) {
            images[i] = decoder.decodeAsRenderedImage(i);
        }

        for (int i = 0; i < images.length; i++) {
            String auxArq = fileTiff.getParent() + "/" + nomeParaConverter + (images.length > 1 ? "-" + i : "") + ".jpeg";

            ParameterBlock parBlock = new ParameterBlock();
            parBlock.addSource(images[i]);
            parBlock.add(auxArq);
            parBlock.add("jpeg");
            RenderedOp renderedOp = JAI.create("filestore", parBlock);
            renderedOp.dispose();    
      
        }
        seekableStream.close();
        fileTiff.delete();
    }

3 Respostas

A

coloquei uma imagem para entender melhor…

a primeira seria o correto ao gerar a imagem e a segunda é o que é gerado e apertado parece que é em uma folha A4
usei programas de conversão a parte e o unico que gerou o jpeg corretamente foi o ReaConverter Pro

A

convertendo de tiff para tiff a imagem ficou comprimida igual à conversão para jpg mas colocando esse codigo ao gerar o tiff deu certo e ficou igual ao original

TIFFEncodeParam tep = new TIFFEncodeParam();
            TIFFField fieldXRes = new TIFFField(0x11A, TIFFField.TIFF_RATIONAL,
                    1, new long[][]{{204, 1}});
            TIFFField fieldYRes = new TIFFField(0x11B, TIFFField.TIFF_RATIONAL,
                    1, new long[][]{{96, 1}});
            tep.setExtraFields(new TIFFField[]{fieldXRes, fieldYRes});

então seria algo semelhante só que para jpg sendo desta forma pesquisei sobre dpi da imagem jpeg e gerei a imagem com a mesma resolução e o mesmo dpi mas mesmo assim não deu certo e ficou esmagada.

Não usei o JAI pois não encontrei para ele

File inputFile = new File("C:/fax000000019.tif");
        File outputFile = new File("C:/convertido.jpg");
        try {
            BufferedImage image = ImageIO.read(inputFile);
            JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(outputFile));
            JPEGEncodeParam jpegEncodeParam = jpegEncoder.getDefaultJPEGEncodeParam(image);
            jpegEncodeParam.setDensityUnit(JPEGEncodeParam.DENSITY_UNIT_DOTS_INCH);
            jpegEncoder.setJPEGEncodeParam(jpegEncodeParam);
            jpegEncodeParam.setQuality(0.75f, false);
            jpegEncodeParam.setXDensity(98);
            jpegEncodeParam.setYDensity(204);
            jpegEncoder.encode(image, jpegEncodeParam);
            image.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

preciso de algo semelhante…

A

resolvi vlw pessoal!!!

Criado 1 de outubro de 2010
Ultima resposta 7 de out. de 2010
Respostas 3
Participantes 1