private static IIOMetadata getWriteMD(ImageWriter writer, ImageWriteParam param) throws IIOInvalidTreeException { ImageTypeSpecifier typeSpecifier = ImageTypeSpecifier.createFromBufferedImageType(BufferedImage.TYPE_INT_RGB); IIOMetadata metadata = writer.getDefaultImageMetadata(typeSpecifier, param); if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported()) { return null; } TIFFDirectory dir = TIFFDirectory.createFromMetadata(metadata); BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance(); // getting the tags TIFFTag resUnit = base.getTag(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT); TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION); TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION); TIFFTag photoInterp = base.getTag(BaselineTIFFTagSet.TAG_PHOTOMETRIC_INTERPRETATION); // (300 x 300 DPI) TIFFField fieldXRes = new TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] {{300, 1}}); TIFFField fieldYRes = new TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] {{300, 1}}); TIFFField fieldResUnit = new TIFFField(resUnit,BaselineTIFFTagSet.RESOLUTION_UNIT_INCH); // doesn't work dir.removeTIFFField(photoInterp.getNumber()); TIFFField fieldPhotoInter = new TIFFField(photoInterp, BaselineTIFFTagSet.PHOTOMETRIC_INTERPRETATION_RGB); // writing to tiffdir dir.addTIFFField(fieldXRes); dir.addTIFFField(fieldYRes); dir.addTIFFField(fieldResUnit); dir.addTIFFField(fieldPhotoInter); return dir.getAsMetadata(); }