2015-02-01 3 views
2

아파치 httpclient를 사용하여 REST 웹 서비스를 호출하고 있습니다. 이 서비스는 base64 형식의 이미지를 반환합니다. 이것을 png 형식의 이미지로 변환하고 싶지만이 이미지 파일을 저장하고 싶지 않습니다. 이유는 10000 명 이상의 사용자가 있고 모든 이미지를 저장하면 많은 메모리를 소비하게됩니다.파일을 저장하지 않고 Base64를 png 형식의 이미지 파일로 변환하십시오. 가능

저는 JDK 1.7을 사용하고 있습니다.

이것을 구현할 수 있습니까?

+0

관련 항목 : http://stackoverflow.com/questions/7178937/java-bufferedimage-to-png-format-base64-string –

+0

이미지는 base64에서 어떤 형식으로 시작해야합니까? 클라이언트에서 문자열 ?? – Adam

+0

스트림을 사용하여 모든 것을 디스크에 쓰지 않고 메모리에 넣을 수 있지만 이미지 자체에 필요한 공간의 1 배 이상의 상수 인수를 사용합니다. – 5gon12eder

답변

0

그 가정, 어떤 형식에서 BufferedImage의 인스턴스를 만들기 ImageIO에서 지원됩니다 ...이 추측하고있어 디스크에서 - 당신은 당신의 질문에 말했다

BufferedImage original = ImageIO.read(new FileInputStream("test.png")); 

쓰기 PNG 등으로 적이 없다 ByteArrayOutputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
ImageIO.write(original, "png", outputStream); 

결과 바이트 배열을 다시 base64로 변환합니다.

String output = DatatypeConverter.printBase64Binary(outputStream.toByteArray()); 
System.out.println(output); 
0

는 어렵지 않을해야 - 대신 파일 기반 것들의 메모리 기반 스트림을 사용할 수 있습니다

  1. 디코드 사용하여 base64로 이미지를, 예를 들어, Apache Common's codec을 바이트 배열로 변환합니다.
  2. ByteArrayInputStream을 사용하여 바이트 배열에서 입력 스트림을 만듭니다.
  3. ImageIO.read
  4. Save to PNG로 보내고 스트림으로 클라이언트에 출력하십시오.
+0

답변 해 주셔서 감사합니다. 이에 대한 코드 스 니펫을 제공해 주시겠습니까? 나는 이것에 상당히 새로운 생각이 전혀 없다. 추가 정보가 필요한 경우 알려주십시오. – user972418

관련 문제