버퍼링된 이미지를 파일로 저장하는 방법
이미지 크기를 조정하기 위해 Imgscalr Java 라이브러리를 사용하고 있다.
크기 조정() 메서드 호출의 결과는 버퍼링된 이미지 객체다.나는 이제 이것을 파일로 저장하기를 원한다(보통 .jpg).
내가 어떻게 그럴 수 있을까?나는 가고 싶다.BufferedImage
->File
하지만 어쩌면 이것이 올바른 접근법이 아닐 수도 있다.
File outputfile = new File("image.jpg");
ImageIO.write(bufferedImage, "jpg", outputfile);
정답은 이미지 쓰기/저장용 Java 설명서의 자습서에 있다.
그Image I/O
class는 이미지를 저장하기 위해 다음과 같은 방법을 제공한다.
static boolean ImageIO.write(RenderedImage im, String formatName, File output) throws IOException
자습서에서는 다음과 같다.
BufferedImage 클래스는 LenderImage 인터페이스를 구현한다.
그래서 그 방법에 쓰일 수 있을 겁니다.
예를 들어,
try {
BufferedImage bi = getMyImage(); // retrieve image
File outputfile = new File("saved.png");
ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
// handle exception
}
그 주변을 에워싸는 것이 중요하다.write
API에 따라, 메소드가 다음을 발생시키기 때문에 try block으로 호출한다.IOException
"쓰기 중에 오류가 발생한 경우"
또한 방법의 목적, 파라미터, 리턴 및 던지기 등도 자세히 설명된다.
파일에 지정된 형식을 지원하는 임의 ImageWriter를 사용하여 이미지 작성파일이 이미 있는 경우, 파일 내용은 폐기된다.
매개 변수:
im - 기록할 렌더 이미지.
formatName - 형식의 비공식적인 이름을 나타내는 문자열.
출력 - 쓸 파일.
반환:
적절한 작가를 찾을 수 없는 경우 거짓으로 처리한다.
던지기:
언페러그먼트예외 - 매개 변수가 null인 경우
IOException - 쓰기 중에 오류가 발생하는 경우
그런데.formatName
여전히 다소 모호하고 모호해 보일 수 있다. 자습서는 그것을 약간 분명히 한다.
이미지IO.write 방식은 PNG 쓰기를 구현하는 코드를 "PNG writer 플러그인"이라고 부른다.플러그인이라는 용어는 이미지 I/O가 확장 가능하고 광범위한 형식을 지원할 수 있기 때문에 사용된다.
그러나 다음과 같은 표준 이미지 형식 플러그인은 항상 존재한다: JPEG, PNG, GIF, BMP 및 WBMP.
대부분의 애플리케이션에서 이러한 표준 플러그인 중 하나를 사용해도 충분하다.그들은 쉽게 구할 수 있다는 장점이 있다.
그러나 다음과 같은 추가 형식을 사용할 수 있다.
Image I/O 클래스는 사용할 수 있는 추가 포맷에 대한 지원을 플러그 인할 수 있는 방법을 제공하며, 그러한 플러그인은 많이 존재한다.시스템에서 로드하거나 저장할 수 있는 파일 형식에 관심이 있는 경우 이미지의 getReaderFormatNames 및 getWriterFormatNames 메서드를 사용하십시오.IO 클래스.이러한 방법은 이 JRE에서 지원되는 모든 형식을 나열하는 문자열의 배열을 반환한다.
String writerNames[] = ImageIO.getWriterFormatNames();
반환된 이름 배열에는 설치된 추가 플러그인이 포함되며 이러한 이름 중 하나를 이미지 작성기를 선택하는 형식 이름으로 사용할 수 있다.
전체적이고 실질적인 예로는 오라클의 예를 들 수 있다.
A을(를) 저장할 수 있다.BufferedImage
클래스의 쓰기 방법을 사용하는 객체방법의 서명은 다음과 같다.
public static boolean write(RenderedImage im, String formatName, File output) throws IOException
여기im
이다RenderedImage
기록될 것은,formatName
형식(예: png)의 비공식적인 이름을 포함하는 문자열이며output
기록할 파일 개체.PNG 파일 형식에 대한 방법의 사용 예는 아래와 같다.
ImageIO.write(image, "png", file);
java.awt.image를 생성하고 저장하십시오.버퍼링된 이미지를 파일로:
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();
}
}
}
주의:
- MyFile.png라는 파일 생성
- 이미지는 500 x 500 픽셀이다.
- 기존 파일을 덮어씁니다.
- 이미지의 색상은 검정 바탕에 파란색 줄무늬가 그려져 있다.
- imgscalr-lib-x.jar 및 imgscalr-lib-x.x-javadoc.jar를 다운로드하여 프로젝트 라이브러리에 추가하십시오.
코드:
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));
단일 라이너로:
ImageIO.write(Scalr.resize(ImageIO.read(...), 150));
참조URL: https://stackoverflow.com/questions/12674064/how-to-save-a-bufferedimage-as-a-file
'programing' 카테고리의 다른 글
@ments 기능을 위해 keyUp에서 "@" 문자 분리 (0) | 2022.05.01 |
---|---|
지나가는 부모들의 소품들이 Vue,js. (0) | 2022.05.01 |
C/C++에서 python 메서드를 호출하여 반환 값 추출 (0) | 2022.05.01 |
Vue.js: 구성 요소가 초기화될 때 감시기 기능을 작동시키는 방법 (0) | 2022.05.01 |
TypeScript가 Vue 플러그인에 대한 모듈 확장을 인식하지 못하는 이유 (0) | 2022.05.01 |