[RESOLVIDO] Ajuda com imagen + FlateEncode + pdf + itext

1 resposta
Fernando_H_Gomes

SEGUINTE ..
Dessa vez ta foda -.-.

- tenho um pdf;
- o pdf tem imagens;
- eu uso a api iText pra pegar as imagens;
- a api me retorna os bytes das imagens;

com jpeg a coisa flui normal..

PROBLEMA:
para jpegs o iText nao faz nenhum tratamento.. nenhum encode..
MAS ..
para outros tipos como PNG .. ele faz um FlateEncode ... um tipo de zip do proprio java ..
entao.. quando me volta os bytes da imagem.. ele ta compactado..

eu to pegando o proprio método da api .. pra fazer o decod..

byte[] bytesDecod = PdfReader.FlateDecode(bytes);

ele me retorno os bytes descompactados..
esses bytes representam uma imagen ..

MAS EU NÃO SEI O TIPO DELA...
pode ser em P&B pode ser colorido ..
pode ser png..
pode ser BMP ..

até entao.. pelo que eu sei esses bytes tao como imagem pura..
acho que bmp mesmo..

a principio a primeira coisa q eu quero fazer é pegar esse meu array de byte e conseguir gerar um arquivo de imagem.

simples assim..

tipo..
pra jpeg.. eu apenas faço isso ..

}else{
										
										Image image = Toolkit.getDefaultToolkit().createImage(bytes);
										images.add(ImageUtils.toBufferedImage(image,
													 Integer.parseInt(pdfStrem.get(PdfName.WIDTH).toString()),
													 Integer.parseInt(pdfStrem.get(PdfName.HEIGHT).toString())));

e funciona..
ele me retorna uma bufferedImage valida.. que eu serializo e posso visualizar..

mas para aqueles bytes decodados nao..

HELP URGENTE.

String colorSpace = pdfStrem.get(PdfName.COLORSPACE).toString();
                                                                        String filter = pdfStrem.get(PdfName.FILTER).toString();
                                                                        int bits = Integer.valueOf(pdfStrem.get(PdfName.BITSPERCOMPONENT).toString());
                                                                        int width = Integer.valueOf(pdfStrem.get(PdfName.WIDTH).toString());
                                                                        int height = Integer.valueOf(pdfStrem.get(PdfName.HEIGHT).toString());
                                                                        PdfDictionary param = (PdfDictionary)pdfStrem.get(PdfName.DECODEPARMS);
                                                                        int colors = Integer.valueOf(param.get(PdfName.COLORS).toString());
                                                                        int predictor = Integer.valueOf(param.get(PdfName.PREDICTOR).toString());
                                                                        int colums = Integer.valueOf(param.get(PdfName.COLUMNS).toString());
                                                                        if(filter.equals("/FlateDecode"))
                                                                        {
                                                                                byte[] bytesDecod = PdfReader.FlateDecode(bytes);

Bom isso é tudo as informações que eu consigo pegar do meu pdf sobre a imagem..

alguem poderia me explicar o que é .. e como eu pego ou calculo o band offSet da imagem ?

------------------
RESOLVIDO USANDO ITEXT+PDF RENDERER USEI UMA MISTURA DE CLASSES ...

1 Resposta

Fernando_H_Gomes

ALGUM ESPECIALISTA EM IMAGENS AE ???? :!:
ta foda..
aqui é até aonde eu consegui chegar..
a classe com.lowagie.text.Image do iText tem um construtor com array de bytes puros e talz.. e me traz umas infos legais..
mas ta foda de trasnformar isso em buferred heim !
PQP ....
eu n sei direito o que tenho que fazer..
alguem ajudaa

public static BufferedImage createBufferedImageFromRawBytes(byte[] bytes,int width, int height, int bits, int colorSpace) throws BadElementException, MalformedURLException, IOException {
		  
		  	DataBuffer db = new DataBufferByte (bytes, bytes.length);
			ColorSpace cs = ColorSpace.getInstance (colorSpace);
			
			//COMO EU DECIDO QUE PACKEDRASTER EU CRIO ?? SERIA BASEADO NO DATATYPE DO MEU DATA BUFFER ?
		  	switch(db.getDataType()){
				case DataBuffer.TYPE_INT: 
					
					break;
				
			}
		  	
			WritableRaster raster = Raster.createPackedRaster(db, //DATA BUFFER 
																	width, //LARGURA
																	height, //ALTURA
																	width*cs.getNumComponents(), //LARGURA *NUM COMP ->scanlineStride 
//																	bits, //BITS POR PIXEL  ->pixelStride
																	new int [] {bits}, 
													
																	null);
			
			ColorSpace cs = ColorSpace.getInstance (img.getColorspace());
			//COMO EU DECIDO O COLOR MODEL ??? GENERICAMENTE .. COM BASE NOS BITS P/ PIXEL ? NO QUE ??
			ColorModel  cm = new ComponentColorModel(cs, false, false, Transparency.OPAQUE, db.getDataType());
			BufferedImage bi = new BufferedImage (cm, raster, false, null); 
		  return null;
	  }

alguem que queria ajudar que possa dar uma olhada aki também..
http://old.nabble.com/Using-Images-extracted-from-a-pdf-tt27693711.html

...

Criado 23 de fevereiro de 2010
Ultima resposta 23 de fev. de 2010
Respostas 1
Participantes 1