2014-10-01 4 views
4

입력으로 매우 큰 TIFF 이미지가 있다고 가정 해 봅니다. 필자가 준수해야하는 메모리 사양으로 인해이 이미지를 완전히로드 할 수 없습니다. 따라서 다음 옵션은 사용할 수 없습니다 :Java로 타일로 TIFF 파일을 읽는 방법은 무엇입니까?

전체 이미지를 버퍼링하지 않고 이미지의 특정 부분을 읽을 수있는 Java 라이브러리가 있습니까? 또는 스트림에서 TIFF 타일을 얻는 방법은 무엇입니까?

답변

6

가 ImageIO에서이 티파니 당신에게 ImageReader를 제공 할 수 있습니다, 그리고 당신은 readTile를 사용할 수 있습니다 것이 좋습니다. ImageIO에는 여러 개의 getImageReadersBy... 메소드가 있습니다.

tiff가 ImageIO에서 지원되는지는 모르지만 ImageIO는 Java SPI를 사용하므로 ImageReaders 및 ImageWriters를 플러그인 할 수 있습니다.

실제로 이것은 타일로 구성된 ImageReadParamread에 대한 바로 가기입니다.

타일을 사용한 적이 없지만 이전 답변을 보면이 옵션을 지적하고 싶습니다. @ 윱의 대답을 보완으로

+0

타일을 사용했지만 다른 언어로 API를 직접 인식하지 못했습니다. API를 알고 있다고 생각했습니다 ... 수업에 감사드립니다. – rolfl

+0

@rolfl 안녕하세요, 저는 [JAI] (http://www.oracle.com/technetwork/java/jaifaq-138288.html)를 통해 tiff에 대한 지원이 있는지 여부를 알지 못하므로 링크가 장점이없는 것은 아닙니다. . –

1

기본 Java 라이브러리에서 구성 요소의 Tiff 파일을 읽을 수있는 방법이 없습니다. 따라서 외부 라이브러리를 사용하거나 자신 만의 라이브러리를 만들면됩니다.

는 @Joop 내가 (! 당신의 도구를 알고) 당신이 필요로하는 모든 지원을 찾을 수없는 경우 인식되지 않았습니다 네이티브 자바 라이브러리에 대한 링크를 제공하고 있습니다

, 당신은 다음과 같은 도움을 찾을 수 있습니다 :

Tiff 파일의 사양은 대단히 복잡하지 않습니다. 나는 그것을 위해 내 자신의 파일 리더를 쓰는 것을 고려할 것이다.

  • File specification (pdf)
  • Java Advanced Imaging API (JAI)
  • 는 읽기 및 TIFF 파일을 구문 분석 signifciantly 확장 된 지원을하고있다처럼 자바 재이 보이는

  • Wiki page
  • +0

    나는 OP가 이미 JAI 나 그 비슷한 것을 사용하고 있다고 생각 하겠지만, 단지 경우에 .. 당신의 독자를 쓰는 대신에 (좋은 재미이지만 꽤 오랜 시간이 걸립니다.) [mine]을 사용할 수 있습니다 (https://github.com/haraldk/TwelveMonkeys#aldusadobe-tagged-image-file-format-tiff). :-) – haraldK

    1

    :

    모든 ImageIO에서 ImageReader 구현은 지정된 소스 영역과 ImageReadParam (ImageReadParam.setSourceRegion(rect))를 지원, 당신은 전체 이미지의 특정 영역을 추출 할 수 있도록. 기본 형식이 타일링을 지원하지 않더라도 타일링 된 TIFF (또는 타일을 지원하는 다른 형식)의 타일 크기에 관계없이 모든 판독기에서 작동합니다.

    예 : 타일로 이미지 타일 아마 당신은 TIFF 형식을 사용하여, 요구 무엇을 달성 할 수있는 가장 효율적인 방법입니다 읽기 말했다

    ImageReader reader = ImageIO.getImageReaders(input).next(); 
    reader.setInput(input); 
    
    ImageReadParam param = reader.getDefaultReadParam(); 
    param.setSourceRegion(new Rectangle(x, y, w, h)); 
    
    BufferedImage aoi = reader.read(0, param); 
    

    . :-)

    관련 문제