2014-01-26 6 views
1

inputStream에서 이미지를 만들 때 두 가지 방법을 사용했지만 두 방법 모두 실패합니다.Java를 inputStream에서 이미지 생성

첫번째 방법 : 엽니 동안

FileOutputStream out=new FileOutputStream(file) 
byte[] byteBuffer = new byte[1024]; 
int length = 0; 
while ((stream != null) && ((length = stream.read(byteBuffer)) != -1)){ 
out.write(byteBuffer,0,length); 
} 
out.flush() 
out.close(); 
stream.close(); 

이 방법은 이미지를 생성하지만. "유효한 비트 맵 파일"이 아닙니다.

그리고 두번째 방법

BufferedImage imBuff = ImageIO.read(stream); 
ImageIO.write(imBuff, 'png', file); 

그리고이 한 예외를 생성한다.

java.lang.IllegalArgumentException : image == null! javax.imageio.ImageTypeSpecifier.createFromRenderedImage (ImageTypeSpe cifier.java:925) javax.imageio.ImageIO.write에서 javax.imageio.ImageIO.getWriter (ImageIO.java:1591) 에서 에서 (ImageIO.java:1520) Grails의 grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter에서 PAG ( eFragmentCachingFilter.java:195)에서 : com.k12report.frontend.ClientAuthoringController $$ EOU2Lt2o.getImages (55 ClientAuthoringController.groovy)에서 . plugin.cache.web.filter.AbstractFilter.doFilter (AbstractFilter .java : 63) 의 java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor. java : 1145)java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor입니다 된 .java : 615)에서 363,210 java.lang.Thread.run (Thread.java:722)에서

감사

+2

입니까? 내용은 무엇입니까? 내용을 디스크에 덤핑하고 외부 이미지 프로그램을 통해 유효성을 확인 했습니까? – MadProgrammer

+0

stream = response.getEntityInputStream() – Biswas

+2

올바른 이미지를 가지고 계십니까? 두 번째 방법에서,'imBuff'는'null'입니다. 이것은 ImageIO가 파일 형식을 인식하지 못할 때 발생합니다. 그 상황을 테스트해야합니다. 첫 번째 방법은 나에게 잘 어울립니다. 가독성과 성능을 위해 루프 외부에서'stream! = null'을 확인해야합니다. – haraldK

답변

1

음, 이것은 유효한 비트 맵 파일이 아닙니다

파일 경로가 OS에 의존 할 때 파일 경로를 사용하는 경우 File.separator를 사용하는 것이 더 권장되는 방법입니다. 더 많은 휴대용.

예 : -`stream`은 무엇

File f = new File("C:"+File.separator+"Personal"+File.separator+"test.bmp");

+0

btw, 얼마나 많은 OS가'C :'를 처음부터 사용합니까? –

+0

나는 grails를 사용하고 있으므로, 'def root = getServletContext(). getRealPath (""); 파일 구분자로 **/** 사용 ** 항상 ** (File-Object로 작업 할 때) 문자열 경로 = root + '/ authoringImages /'+ images 파일 파일 = 새 파일 (경로); – Biswas

+0

... 창을 사용할 때 .... – Ben