【问题标题】:Convert java.awt.Image to TIFF byte array with compression将 java.awt.Image 转换为 TIFF 字节数组并进行压缩
【发布时间】:2012-03-21 07:06:39
【问题描述】:

我有一个 java.awt.Image,我需要添加 CCITT T.6 压缩并转换为 TIFF 字节数组。我已经看到了一些使用 TIFFImageWriteParam 和 javax.imageio 包中的其他类的示例,但我找不到从 Image 到字节数组的完整示例。

到目前为止,这是我从扫描获得的 java.awt.Image 开始的。这可以很好地生成 TIFF 的字节数组,但我需要找到一种方法,使用 TIFFImageWriteParam 或其他方式在将 TIFF 处理为字节数组之前对其进行压缩:

thisImage = ... a java.awt.Image from a scanner
if(thisImage!=null){

  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  BufferedImage bimg = new BufferedImage(thisImage.getWidth(null),thisImage.getHeight(null), BufferedImage.TYPE_BYTE_BINARY);  
  bimg.createGraphics().drawImage(thisImage, 0, 0, null);

  try {
    ImageIO.write(bimg, "tiff", baos);                  
  } catch (Exception e) {
    e.printStackTrace();
  }

  thisByteArray = baos.toByteArray();

  ...

任何帮助将不胜感激。

【问题讨论】:

    标签: java image compression bytearray tiff


    【解决方案1】:

    感谢this thread.

    ,我找到了解决方案

    这就是我最终解决我的问题的方法:

    thisImage = thisImage = ... a java.awt.Image from a scanner
    if(thisImage!=null){  
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      ImageOutputStream ios = ImageIO.createImageOutputStream(baos);
      boolean foundWriter = false;
      BufferedImage bimg = new BufferedImage(thisImage.getWidth(null),thisImage.getHeight(null), BufferedImage.TYPE_BYTE_BINARY);
      bimg.createGraphics().drawImage(thisImage, 0, 0, null); 
      for(Iterator<ImageWriter> writerIter = ImageIO.getImageWritersByFormatName("tif"); writerIter.hasNext() && !foundWriter;) {
        foundWriter = true;
        ImageWriter writer = (ImageWriter)writerIter.next();
        writer.setOutput(ios);
        TIFFImageWriteParam writeParam = (TIFFImageWriteParam)writer.getDefaultWriteParam();
        writeParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        writeParam.setCompressionType("CCITT T.6"); 
        writer.prepareWriteSequence(null);
        ImageTypeSpecifier spec = ImageTypeSpecifier.createFromRenderedImage(bimg);
        javax.imageio.metadata.IIOMetadata metadata = writer.getDefaultImageMetadata(spec, writeParam);
        IIOImage iioImage = new IIOImage(bimg, null, metadata);
        writer.writeToSequence(iioImage, writeParam);
        bimg.flush();
        writer.endWriteSequence();
        ios.flush();
        writer.dispose();
        ios.close();
        thisByteArray = baos.toByteArray(); 
        baos.close();
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      相关资源
      最近更新 更多