티스토리 뷰

Java 이미지 파일 출력 방법

  • 메모리상의 BufferedImage 인스턴스를 외부로 이미지 파일 형태로 출력하는 방법에 대해서 공유하고자 한다.

구현방법

TIFF 출력방법

public void saveToImage(File toSave, String format, BufferedImage imageBuffer) throws IOException {
    Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("tiff");
    TIFFImageWriter tiffImageWriter = (TIFFImageWriter) writers.next();
    TIFFImageWriteParam writeParam = (TIFFImageWriteParam) tiffImageWriter.getDefaultWriteParam();
    TIFFT6Compressor compressor = new TIFFT6Compressor();
    writeParam.setCompressionMode(TIFFImageWriteParam.MODE_EXPLICIT);
    writeParam.setTIFFCompressor(compressor);

    ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(new FileOutputStream(toSave));
    tiffImageWriter.setOutput(imageOutputStream);
    tiffImageWriter.write(null, new IIOImage(imageBuffer, null, null), writeParam);
    tiffImageWriter.dispose();
    imageOutputStream.close();
}

JPEG 출력방법

public void saveToImage(File toSave, String format, BufferedImage imageBuffer) throws IOException {
      Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("jpg");
      JPEGImageWriter jpegImageWriter = (JPEGImageWriter) writers.next();
      JPEGImageWriteParam writeParam = (JPEGImageWriteParam) jpegImageWriter.getDefaultWriteParam();
      writeParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);

      ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(new FileOutputStream(toSave));
      jpegImageWriter.setOutput(imageOutputStream);
      jpegImageWriter.write(null, new IIOImage(imageBuffer, null, null), writeParam);
      jpegImageWriter.dispose();
      imageOutputStream.close();
}

PNG 출력방법

public void saveToImage(File toSave, String format, BufferedImage imageBuffer) throws IOException {
    imageInfo = new ImageInfo(imageBuffer.getWidth(), imageBuffer.getHeight(), 16, false);
    pngWriter = new PngWriter(outputFile, imageInfo, true);
    pngWriter.getPixelsWriter().setDeflaterCompLevel(compressLevel);
    pngWriter.getPixelsWriter().setDeflaterStrategy(compressStrategy);
    PngMetadata pngMetadata = pngWriter.getMetadata();
    pngMetadata.setTimeNow();
    
    DataBuffer imageDataBuffer = imageBuffer.getRaster().getDataBuffer();
    ImageLineByte imageLineByte = new ImageLineByte(imageInfo);

    int[] data = ((DataBufferInt) imageDataBuffer).getData();
    byte[] line = imageLineByte.getScanline();
    for (int i = 0; i < lines; i++) {
      for (int d = 0; d < img.getWidth(); d++) {
        int val = data[i * img.getWidth() + d];
        line[3 * d + 0] = (byte) (val >> 16);  //R
        line[3 * d + 1] = (byte) (val >> 8);   //G
        line[3 * d + 2] = (byte) val;          //B
      }
      pngWriter.writeRow(imageLineByte);
    }
    pngWriter.end();
    pngWriter.close();
}

관련글

 

[Java] java.awt.Image를 BufferedImage로 변환하는 방법

들어가며 Java사용시 java.awt.Image 클래스를 Buffered Image로 변환을 해야 하는 상황이 펼쳐졌다. 생각보다 삽질을 하다가 해결을 하였다. 구현방법 Graphics 클래스를 이용하여 image를 BufferedImage로 darw..

jinseongsoft.tistory.com


끝으로

이 글이 도움이 되었다면, 하단의 Google 광고 👎👎👎 한번씩 클릭 부탁 드립니다. 🙏🙏🙏

광고 클릭은 많은 힘이 됩니다! 

 

반응형
댓글