BufferedImage를 파일로 저장하는 방법


125

imgscalr를 사용하고 있습니다. 이미지 크기를 조정하는 자바 라이브러리를.

resize () 메서드 호출의 결과는 BufferedImage 객체입니다. 이제 이것을 파일 (보통 .jpg)로 저장하고 싶습니다.

어떻게 할 수 있습니까? 나는 BufferedImage-> 에서 가고 File싶지만 이것이 올바른 접근 방식이 아닐까요?

답변:


238
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);

7
또한 출력 파일이 있는지 확인하십시오. 그렇지 않은 경우 write ()는 (잘못된) NullPointerException을 throw합니다
Cody S

9
try / catch로 둘러싸십시오.
Lou Morda 2014

잡기 NullPointerException, 사용if (outputfile.exists())
Danon

24

클래스의 BufferedImage쓰기 메소드를 사용하여 객체를 저장할 수 있습니다 javax.imageio.ImageIO. 메서드의 서명은 다음과 같습니다.

public static boolean write(RenderedImage im, String formatName, File output) throws IOException

다음 imRenderedImage기록 될 formatName형식의 비공식 이름 (예 : png)을 포함하는 문자열이며 output기록 할 파일 객체입니다. PNG 파일 형식에 대한 방법의 사용 예는 다음과 같습니다.

ImageIO.write(image, "png", file);

20

대답은 Java Documentation의 Tutorial for Writing / Saving an Image에 있습니다.

Image I/O클래스는 다음과 같은 이미지 저장 방법을 제공합니다.

static boolean ImageIO.write(RenderedImage im, String formatName, File output)  throws IOException

튜토리얼은

BufferedImage 클래스는 RenderedImage 인터페이스를 구현합니다.

그래서 방법에 사용할 수 있습니다.

예를 들면

try {
    BufferedImage bi = getMyImage();  // retrieve image
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
    // handle exception
}

API 에 따라 메소드가 다음을 던지기 때문에 try 블록으로write 호출 을 둘러싸는 것이 중요합니다 .IOException "작성하는 동안 오류가 발생하는 경우"를

또한 메서드의 목표, 매개 변수, 반환 및 throw에 대해서도 자세히 설명합니다.

주어진 형식을 지원하는 임의의 ImageWriter를 사용하여 이미지를 File에 씁니다. 이미 File이있는 경우 해당 내용은 삭제됩니다.

매개 변수 :

im-기록 될 RenderedImage

formatName-형식의 비공식 이름을 포함하는 문자열.

output-기록 할 파일.

보고:

적절한 작성자가 없으면 false입니다.

던졌습니다 :

IllegalArgumentException-매개 변수가 null 인 경우

IOException-쓰기 중에 오류가 발생한 경우

그러나 formatName여전히 다소 모호하고 모호해 보일 수 있습니다. 튜토리얼은 그것을 약간 정리합니다.

ImageIO.write 메서드는 "PNG writer 플러그인"을 작성하는 PNG를 구현하는 코드를 호출합니다. 플러그인이라는 용어는 이미지 I / O가 확장 가능하고 다양한 형식을 지원할 수 있기 때문에 사용됩니다.

그러나 JPEG, PNG, GIF, BMP 및 WBMP와 같은 표준 이미지 형식 플러그인은 항상 존재합니다.

대부분의 응용 프로그램에서는 이러한 표준 플러그인 중 하나를 사용하는 것으로 충분합니다. 그들은 쉽게 사용할 수 있다는 장점이 있습니다.

그러나 사용할 수있는 추가 형식이 있습니다.

Image I / O 클래스는 사용할 수있는 추가 형식에 대한 지원을 플러그인하는 방법을 제공하며 이러한 플러그인이 많이 존재합니다. 시스템에서로드하거나 저장할 수있는 파일 형식에 관심이있는 경우 ImageIO 클래스의 getReaderFormatNames 및 getWriterFormatNames 메서드를 사용할 수 있습니다. 이러한 메서드는이 JRE에서 지원되는 모든 형식을 나열하는 문자열 배열을 반환합니다.

String writerNames[] = ImageIO.getWriterFormatNames();

반환 된 이름 배열에는 설치된 추가 플러그인이 포함되며 이러한 이름은 이미지 작성기를 선택하기위한 형식 이름으로 사용될 수 있습니다.

완전하고 실용적인 예는 Oracle의 예를 참조 할 수 있습니다 SaveImage.java.


9

java.awt.image.bufferedImage를 만들고 파일에 저장합니다.

import java.io.*;
import java.awt.image.*;
import javax.imageio.*;
public class Main{
    public static void main(String args[]){
        try{
            BufferedImage img = new BufferedImage( 
                500, 500, BufferedImage.TYPE_INT_RGB );

            File f = new File("MyFile.png");
            int r = 5;
            int g = 25;
            int b = 255;
            int col = (r << 16) | (g << 8) | b;
            for(int x = 0; x < 500; x++){
                for(int y = 20; y < 300; y++){
                    img.setRGB(x, y, col);
                }
            }
            ImageIO.write(img, "PNG", f);
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
}

노트:

  1. MyFile.png라는 파일을 만듭니다.
  2. 이미지는 500 x 500 픽셀입니다.
  3. 기존 파일을 덮어 씁니다.
  4. 이미지의 색상은 상단에 파란색 줄무늬가있는 검은 색입니다.

1
  1. 다운로드 및 추가 imgscalr-LIB-xxjarimgscalr-LIB-XX-javadoc.jar 프로젝트의 라이브러리에.
  2. 코드에서 :

    import static org.imgscalr.Scalr.*;
    
    public static BufferedImage resizeBufferedImage(BufferedImage image, Scalr.Method scalrMethod, Scalr.Mode scalrMode, int width, int height)  {
        BufferedImage bi = image;
        bi = resize( image, scalrMethod, scalrMode, width, height);
    return bi;
    }
    
    // Save image:
    ImageIO.write(Scalr.resize(etotBImage, 150), "jpg", new File(myDir));

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.