앞서 언급했듯이 Aperio에서 만든 .svs
파일은 단지 TIFF files (일부 제한 사항과 약간의 확장자가 있음)입니다.
그것은 당신이 단지 기존 라이브러리를 사용하여 이러한 파일에서 이미지를 읽을 것인지 질문에서 명확하지 않다, 또는 당신이 (그렇지 않으면 교육 목적 또는에 대한) 자신에 대한 이러한 솔루션을 개발하고자합니다.
후자의 경우 "새로운"JPEG 압축을 지정하는 Adobe 기술 노트 및 Aperio SVS 형식에 대해 문서화 된 내용을 참조하여 TIFF 6.0 specification을 읽어야합니다. 기존 라이브러리의 소스 코드를 볼 수도 있습니다. 처음부터 TIFF/SVS 리더/디코더를 구현하는 데 필요한 단계를 설명하는 것은 StackOverflow의 응답의 범위를 벗어나는 방법입니다.
그런 경우 Java에서 이러한 파일을 열려면 ImageIO
과 TIFF 플러그인 *을 사용하여 대부분 열 수 있어야합니다.
코드는 다음과 같이 간단 할 수있다 :
BufferedImage image = ImageIO.read(new File("path/to/your.svs"));
이 첫 번째를 읽어, 나는 사양, 파일의 전체 해상도 이미지에서 이해 내용에 따라.이것은 당신이 너무 큰 이미지를 건너 뛸 수
// Create input stream
File file = new File("path/to/your.svs");
try (ImageInputStream input = ImageIO.createImageInputStream(file)) {
// Get the reader
Iterator<ImageReader> readers = ImageIO.getImageReaders(input);
if (!readers.hasNext()) {
throw new IllegalArgumentException("No reader for: " + file);
}
ImageReader reader = readers.next();
try {
reader.setInput(input);
// Optionally, listen for read warnings, progress, etc.
reader.addIIOReadWarningListener(...);
reader.addIIOReadProgressListener(...);
// Use reader.getNumImages(true) to get the number of images
// in the file, and optionally add a loop to read all the images.
ImageReadParam param = reader.getDefaultReadParam();
// Optionally, control read settings like subsampling, source region or destination etc.
param.setSourceSubsampling(...);
param.setSourceRegion(...);
param.setDestination(...);
// ...
// Finally read the image, using settings from param
BufferedImage image = reader.read(0, param);
// Optionally, read thumbnails, etc...
int numThumbs = reader.getNumThumbnails(0);
// ...
// Optionally, get the image metadata (ie. to get the custom Aperio
// values from the ImageDescription tag for further processing)
IIOMetadata metadata = reader.getImageMetadata(0);
// ...
}
finally {
// Dispose reader in finally block to avoid memory leaks
reader.dispose();
}
}
: 파일에 (당신은 루프를 추가하면, 모든 이미지 또는)
는 코드가 좀 더 상세하게 특정 이미지를 읽으려면 Java로 표시 (
.svs
파일에는
BufferedImage
...에 대해 너무 큰 이미지가 포함될 수 있음) 또는 독자가 지원하지 않는 사용자 정의 압축이 있습니다 (
.svs
파일에는 기본 JPEG 및 사용자 정의 JPEG 2000로 압축 된 이미지가 포함될 수 있음).
이미지 순서, "미리보기 이미지", "매크로"및 "레이블"이미지를 보려면 사양을 읽어야합니다. "축소판 그림"은 항상 JPEG 스트림이라고 생각합니다. ImageIO에서 대한
*) TIFF 플러그인 :
ImageIO에서 가장 일반적인 TIFF 플러그인은 JAI ImageIO에서 (jai_imageio.jar
)입니다,하지만 개발에 더 이상, 나는 그것을 테스트하지 않았습니다 .svs
파일
내 프로젝트 인 TwelveMonkeys ImageIO은 적극적으로 개발되었으며 JAI에서 제공하는 것과 호환되지만 버그를 수정하고 누락 된 기능을 추가하는 것을 목표로하는 TIFF 플러그인을 포함합니다. 일부 샘플 .svs
파일을 사용하여이 플러그인을 테스트했으며 비표준 ("TIFF 사양이 아님") JPEG 2000 압축 파일을 제외하고 파일을 읽을 수 있습니다.
내가 아는 TIFF 플러그인이 있지만 이것들을 시도하지 않았습니다.
- 잘 모르는 특수 목적의 Aperio SVS 플러그인이있을 수도 있습니다.
SVS 파일 *은 "기본적으로 다중 레이어 티프"*입니다. 그러나 TIFF 형식은 다른 픽셀 형식, 이미지 레이아웃, 압축 형식 등을 허용합니다. 매우 복잡합니다. SVS 샘플 파일 몇 개를 다운로드했으며 JPEG 및 JPEG 2000 (J2K) 데이터가 포함되어 있습니다. 따라서 디코드 할 알고리즘이 하나도 없으므로 TIFF 구조를 구문 분석 한 다음 스트립/타일에서 이미지의 압축을 풀고 다시 어셈블해야합니다. 내 [TwelveMonkeys ImageIO] (https://github.com/haraldk/TwelveMonkeys) 라이브러리는 J2K 데이터를 제외하고 소스를 보거나 그냥 사용하려는 경우 잘 열어 보입니다. – haraldK
@haraldK 답장을 보내 주셔서 감사합니다. TIFF 구조를 구문 분석하고 압축을 풀고 다시 어셈블하는 방법을 자세히 설명해 주시겠습니까? 이 작업을 수행하기 위해 TwelveMonkeys 라이브러리를 어떻게 사용합니까? 정말 고마워! –