Boa tarde.
Estou convertendo uma imagem que está em JPEG para TIFF mas não estou conseguindo setar algumas TAGS como por exemplo Photometric E StripOffsets.
Meu código é o seguinte:
ParameterBlockJAI loadPB = new ParameterBlockJAI("fileload");
loadPB.setParameter("filename","teste.jpeg");
BufferedImage img = JAI.create("fileload", loadPB).getAsBufferedImage();
BufferedImage outputImage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_BYTE_BINARY);
outputImage.createGraphics().drawImage(img, 0, 0, null);
TIFFField[] tifFields = new TIFFField[7];
tifFields[0] = new TIFFField(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT, TIFFTag.TIFF_SHORT, 1, INCH_RESOLUTION_UNIT);
tifFields[1] = new TIFFField(BaselineTIFFTagSet.TAG_X_RESOLUTION, TIFFTag.TIFF_RATIONAL, 1, X_DPI_RESOLUTION);
tifFields[2] = new TIFFField(BaselineTIFFTagSet.TAG_Y_RESOLUTION, TIFFTag.TIFF_RATIONAL, 1, Y_DPI_RESOLUTION);
tifFields[3] = new TIFFField(BaselineTIFFTagSet.TAG_BITS_PER_SAMPLE, TIFFTag.TIFF_SHORT, 1, BITS_PER_SAMPLE);
tifFields[4] = new TIFFField(BaselineTIFFTagSet.TAG_ROWS_PER_STRIP, TIFFTag.TIFF_LONG, 1, ROWS_PER_STRIP);
tifFields[5] = new TIFFField(BaselineTIFFTagSet.TAG_COMPRESSION, TIFFTag.TIFF_SHORT, 1, COMPRESSION);
tifFields[6] = new TIFFField(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION, TIFFTag.TIFF_SHORT, 1, new char[]{BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO}); //NOT OK
tifFields[7] = new TIFFField(BaselineTIFFTagSet.TAG_STRIP_OFFSETS, TIFFTag.TIFF_LONG, 1, new long[]{STRIP_OFFSETS});
tifFields[8] = new TIFFField(BaselineTIFFTagSet.TAG_FILL_ORDER, TIFFTag.TIFF_SHORT, 1, new char[]{BaselineTIFFTagSet.FILL_ORDER_LEFT_TO_RIGHT});
tifFields[9] = new TIFFField(BaselineTIFFTagSet.TAG_STRIP_BYTE_COUNTS, TIFFTag.TIFF_LONG, 1, new long[]{41406});
tifFields[10] = new TIFFField(BaselineTIFFTagSet.TAG_PLANAR_CONFIGURATION, TIFFTag.TIFF_SHORT, 1, new char[]{BaselineTIFFTagSet.PLANAR_CONFIGURATION_CHUNKY});
tifFields[11] = new TIFFField(BaselineTIFFTagSet.TAG_SOFTWARE, TIFFTag.TIFF_ASCII, 1, new String[]{"WSUra by Embracon Administradora de Consorcio"});
tifFields[12] = new TIFFField(BaselineTIFFTagSet.TAG_ORIENTATION, TIFFTag.TIFF_SHORT, 1, new char[]{BaselineTIFFTagSet.ORIENTATION_ROW_0_TOP_COLUMN_0_LEFT});
TIFFEncodeParam param = new TIFFEncodeParam();
param.setCompression(TIFFEncodeParam.COMPRESSION_GROUP3_2D);
param.setExtraFields(tifFields);
param.setT4Encode2D(false);
File of = new File("9.TIF");
OutputStream stream = new FileOutputStream(of);
TIFFImageEncoder encoder = (TIFFImageEncoder) TIFFCodec.createImageEncoder("tiff", stream, param);
encoder.setParam(param);
encoder.encode(outputImage);
TIFF CORRETA:
ImageWidth (1 Short): 1074
ImageLength (1 Short): 1520
BitsPerSample (1 Short): 1
Compression (1 Short): Group 3 Fax (aka CCITT FAX3)
Photometric (1 Short): MinIsWhite
FillOrder (1 Short): Msb2Lsb
StripOffsets (1 Long): 8
Orientation (1 Short): TopLeft
SamplesPerPixel (1 Short): 1
RowsPerStrip (1 Short): 1520
StripByteCounts (1 Long): 41406
XResolution (1 Rational): 0
YResolution (1 Rational): 0
PlanarConfig (1 Short): Contig
ResolutionUnit (1 Short): Inch
Software (10 ASCII): IrfanView
TIFF GERADA:
ImageWidth (1 Long): 1728
ImageLength (1 Long): 2615
BitsPerSample (1 Short): 1
Compression (1 Short): Group 3 Fax (aka CCITT FAX3)
Photometric (1 Short): MinIsBlack //Como mudar este campo para MinIsWhite?
FillOrder (1 Short): Msb2Lsb
StripOffsets (327 Long): 2896, 2948, 3000, 3052, 3104, 3156, 3208,... //Não consigo alterar
Orientation (1 Short): TopLeft
SamplesPerPixel (1 Short): 1
RowsPerStrip (1 Long): 8
StripByteCounts (327 Long): 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52,... //Não consigo alterar
XResolution (1 Rational): 204
YResolution (1 Rational): 196
PlanarConfig (1 Short): Contig
Group3Options (1 Long): 0
ResolutionUnit (1 Short): Inch
Software (46 ASCII): IrfanView
Alguém sabe como posso alterar essas tags?
Obrigado