2010-05-24 3 views
13

아웃 쓰기 TIFF 이미지 나는 읽기와 쓰기의 TIFF 이미지의 작업을 수행하려면 다음 코드를 시도읽기와 자바

Caused by: java.lang.IllegalArgumentException: Only images with either 1 or 3 bands 
can be written out as BMP files. 
at com.sun.media.jai.codecimpl.BMPImageEncoder.encode(BMPImageEncoder.java:123) 
at com.sun.media.jai.opimage.EncodeRIF.create(EncodeRIF.java:79) 

이 문제를 어떻게 해결할 수 있습니까?

답변

20

을 BMP는 ImageIO에서 클래스를 사용하는 것 TIFF 출력에서 ​​읽을 수있는 가장 쉬운 방법 :

BufferedImage image = ImageIO.read(inputFile); 
ImageIO.write(image, "bmp", new File(outputFile)); 

유일한 추가 것은 당신은 '당신이 확인되는 일이를 얻기 위해해야 ​​할 것 BMP와 TIFF는이 라이브러리의 플러그인없이 JRE에 의해 처리되지 않으므로 클래스 패스에 JAI ImageIO JAR을 추가했습니다.

JAI ImageIO를 사용할 수없는 경우 기존 코드로 작업 할 수 있지만 추가 작업을해야합니다. 로드중인 TIFF 용으로 작성되는 색상 모델은 아마도 BMP에서 지원하지 않는 색인 된 색상 모델 일 것입니다. 렌더링 힌트에 JAI.KEY_REPLACE_INDEX_COLOR_MODEL 키를 제공하여 JAI.create ("format", ...) 연산으로 바꿀 수 있습니다.

당신은 약간의 행운 임시 이미지로 파일에서 읽은 이미지를 작성하고 임시 이미지 작성하는있을 수 있습니다

BufferedImage image = ImageIO.read(inputFile); 
BufferedImage convertedImage = new BufferedImage(image.getWidth(), 
    image.getHeight(), BufferedImage.TYPE_INT_RGB); 
convertedImage.createGraphics().drawRenderedImage(image, null); 
ImageIO.write(convertedImage, "bmp", new File(outputFile)); 

같은 인덱스 색상 모델 문제로 실행하는 경우 내가 궁금하네요을 일반 JAI와 마찬가지입니다. 이상적으로 ImageIO 클래스를 사용하여 가장 간단한 경우를 제외하고 ImageReader 및 ImageWriter 인스턴스를 가져와 읽기 및 쓰기 매개 변수를 적절하게 조정할 수 있지만 ImageIO.read() 및 .write()를 사용하면 당신이 원하는.

+0

는 "ImageIO.write (이미지,"BMP "는 새로운 파일 (출력 _))는"딱딱하지 성공적으로 이미지를 ".bmp"파일로 쓸 수 있습니다. 대신 ".tiff"로 코드를 변경하면 작동합니다. – user224270

+0

죄송합니다 ... 작은 오타가있었습니다. ImageIO.write는 원본 이미지가 아닌 convertedImage를 써야합니다. – Jeff

+0

감사합니다. Jeff. 그것은 일했다! 너는 나의 날을 정말로 구했다;) – user224270

0
FileInputStream in = new FileInputStream(imgFullPath); 
FileChannel channel = in.getChannel(); 
ByteBuffer buffer = ByteBuffer.allocate((int)channel.size()); 
channel.read(buffer); 
tiffEncodedImg = Base64.encode(buffer.array()); 

사용이 내용을 HTML의 img 태그의 SRC 값으로 ("tiffEncodedImg"의 예 값)