Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static byte[] imageIOConvertTIFFG4WithDpi(byte[] imageByte, boolean isOneBitColor, Integer dpiX, Integer dpiY) throws IOException, ImageReadException {
- BufferedImage input = ImageConvertUtil.imageIOConvertBufferdImage(imageByte);
- // 1-bit color convert
- if (isOneBitColor) {
- input = ConvertUtil.convert1(input);
- }
- Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("TIFF");
- while(writers.hasNext()) {
- ImageWriter writer = writers.next();
- ImageWriteParam iwp = writer.getDefaultWriteParam();
- iwp.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
- iwp.setCompressionType("CCITT T.6");
- IIOMetadata streamMetadata = createMetadata(writer, iwp, dpiX, dpiY);
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- javax.imageio.stream.MemoryCacheImageOutputStream output = new MemoryCacheImageOutputStream(bout);
- writer.setOutput(output);
- IIOImage image = new IIOImage(input, null, streamMetadata);
- writer.write(null, image, iwp);
- output.close();
- return bout.toByteArray();
- }
- return null;
- }
- private static IIOMetadata createMetadata(ImageWriter writer, ImageWriteParam writerParams, Integer widthDpi, Integer heightDpi) throws
- IIOInvalidTreeException
- {
- // Get default metadata from writer
- ImageTypeSpecifier type = writerParams.getDestinationType();
- IIOMetadata meta = writer.getDefaultImageMetadata(type, writerParams);
- // Convert default metadata to TIFF metadata
- TIFFDirectory dir = TIFFDirectory.createFromMetadata(meta);
- // Get {X,Y} resolution tags
- BaselineTIFFTagSet base = BaselineTIFFTagSet.getInstance();
- TIFFTag tagXRes = base.getTag(BaselineTIFFTagSet.TAG_X_RESOLUTION);
- TIFFTag tagYRes = base.getTag(BaselineTIFFTagSet.TAG_Y_RESOLUTION);
- long dpiX = widthDpi.longValue();
- long dpiY = heightDpi.longValue();
- // Create {X,Y} resolution fields
- TIFFField fieldXRes = new TIFFField(tagXRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] { { dpiX, 1l } });
- TIFFField fieldYRes = new TIFFField(tagYRes, TIFFTag.TIFF_RATIONAL, 1, new long[][] { { dpiY, 1l } });
- // Add {X,Y} resolution fields to TIFFDirectory
- dir.addTIFFField(fieldXRes);
- dir.addTIFFField(fieldYRes);
- // Add unit field to TIFFDirectory (change to RESOLUTION_UNIT_CENTIMETER if necessary)
- dir.addTIFFField(new TIFFField(base.getTag(BaselineTIFFTagSet.TAG_RESOLUTION_UNIT), BaselineTIFFTagSet.RESOLUTION_UNIT_INCH));
- // Return TIFF metadata so it can be picked up by the IIOImage
- return dir.getAsMetadata();
- }
RAW Paste Data