특징 및 기능

기능 및 특성

이 페이지는 Aspose.Imaging FOSS의 .NET 형식 감지 및 헤더 탐지 API에 대한 모든 기능 영역을 다루며, 작동하는 C# 예제를 제공합니다. 라이브러리는 픽셀 데이터를 절대 디코딩하지 않으며 — 모든 메서드는 파일 헤더만을 읽습니다.


형식 감지

ImageProbe는 정적 진입점입니다. 세 가지 오버로드가 파일 경로, 스트림 및 원시 바이트 배열을 지원합니다:

using Aspose.Imaging.Foss;

var fromPath   = ImageProbe.ProbeFile("photo.jpg");
var fromBytes  = ImageProbe.Probe(byteArray);
var fromStream = ImageProbe.Probe(stream);

var formatOnly = ImageProbe.DetectFormat(byteArray); // ImageFormat only, no header parse

형식에 따라 분기만 필요할 경우 DetectFormat를 사용하고, 차원, 비트 깊이 또는 프레임 수가 필요할 경우 Probe/ProbeFile를 사용하십시오.


헤더 메타데이터 읽기

ProbeFile/Probe는 nullable Width, Height, BitDepth, 및 FrameCount을 포함하는 ImageInfo를 반환합니다 — 각각은 감지된 형식의 헤더에 실제로 해당 값이 포함된 경우에만 채워집니다:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}

Format (an ImageFormat enum value) 은 헤더가 인식되면 항상 설정됩니다 — 채워지는 것이 보장된 유일한 필드입니다.


포맷별 참고 사항

몇몇 포맷은 ImageInfo 가 정규화하거나 직접 노출하는 헤더 특이점이 있습니다:

포맷Behavior
GIFFrameCount은(는) 파일에 여러 프레임이 포함된 경우 프레임 수를 나타냅니다; 카운트를 확인할 수 없을 경우 생략됩니다
BMP헤더에 있는 음수 높이(상단부터 순서)는 정규화됩니다 — Height은(는) 양의 크기를 반환합니다
DICOM헤더 파싱은 Implicit VR Little Endian 및 Explicit VR Little/Big Endian 전송 구문을 처리하여 행, 열 및 할당된 비트를 추출합니다
// DICOM: rows -> Height, columns -> Width, bitsAllocated -> BitDepth,
// across any of the three common transfer syntaxes
var dicomInfo = ImageProbe.Probe(dicomBytes);
Console.WriteLine($"{dicomInfo.Width}x{dicomInfo.Height}, {dicomInfo.BitDepth}-bit");

지원되는 포맷

11개의 모든 포맷은 동일한 방식으로 감지됩니다 — ImageProbe 가 포맷을 식별하고 헤더 메타데이터를 읽습니다; 어떤 경우에도 픽셀 데이터를 디코딩하거나 재인코딩하지 않습니다. 필드 채워짐은 포맷마다 실제로 다르지만 — 모든 포맷이 Format 을 설정하고, 일부만 헤더에 비트 깊이 또는 프레임 수를 포함합니다:

포맷너비 / 높이비트 깊이프레임 수
PNG✓✓✓
JPEG✓✓—
GIF✓—✓
BMP✓✓—
WebP✓——
ICO✓✓✓
TIFF✓✓✓
PSD✓✓—
EMF✓ (범위에서)——
WMF (배치 가능)✓ (96 DPI 가정)——
DICOM✓ (행/열)✓ (BitsAllocated)—

인식되지 않은 헤더는 예외를 발생시키는 대신 ImageFormat.Unknown 로 처리됩니다. 몇 가지 주목할 만한 필드 채워짐 세부 사항: PNG의 FrameCount 은 항상 1 (상수이며 실제 애니메이션 PNG 프레임 감지가 아님) 입니다; ICO의 FrameCount 은 디렉터리 내에 포함된 아이콘 크기의 실제 개수이며, ICO 디렉터리 항목의 0 차원 바이트는 포맷 사양에 따라 256픽셀을 의미합니다; TIFF의 FrameCount 은 파일의 IFD 체인을 제한된 범위 내에서 순회한 결과를 반영합니다 (각 IFD는 한 페이지); 비플레이어블 WMF는 여전히 정확히 ImageFormat.Wmf 로 식별되지만 Format 만 반환합니다 — 차원은 플레이어블 WMF에만 적용되며, 헤더의 인치당 단위 범위에서 하드코딩된 96 DPI 변환을 통해 채워집니다; EMF는 명시적인 너비/높이 필드가 전혀 없으므로 차원은 대신 rclBounds 디바이스 공간 사각형에서 파생됩니다.


디자인상의 회복력

ImageProbe 은 잘못되었거나 잘린 입력에서도 예외를 발생시키지 않습니다. 예외를 발생시키는 대신, 부분적인 ImageInfo 을 반환합니다 — 헤더의 포맷 마커가 인식될 때마다 Format 가 설정되며, 파일의 나머지 부분이 짧게 잘리거나 손상된 경우에도 마찬가지입니다:

byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null

이처럼 하면 신뢰할 수 없는, 부분적인 또는 진행 중인 다운로드에 대해 매 호출마다 try/catch를 사용하지 않아도 안전하게 실행할 수 있습니다.


팁 및 모범 사례

  • 형식만 필요하고 차원은 필요하지 않을 때는 DetectFormat을(를) Probe 대신 사용하십시오.
  • 사용하기 전에 Width/Height/BitDepth/FrameCount에 null가 있는지 확인하십시오 — 모든 형식에 대해 채워지지는 않습니다.
  • 대용량 파일을 다룰 때 전체 파일을 바이트 배열로 읽는 것보다 Probe(stream)을(를) 선호하십시오.
  • ImageProbe은 완전히 정적입니다 — 인스턴스도 없고, IDisposable도 없으며, 구성 객체도 없습니다.

일반적인 문제

문제원인수정
Format은 ImageFormat.Unknown헤더가 인식된 11가지 형식 중 어느 것과도 일치하지 않습니다파일이 PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF 또는 DICOM 중 하나인지 확인하십시오.
Width/Height은 null해당 형식의 헤더에 그 필드가 없거나, 헤더가 그 필드 이전에 잘려 있습니다.먼저 Format를 확인하십시오; 모든 형식에 모든 필드가 채워지는 것은 아닙니다.
BMP 높이가 예상치 못하게 양수로 보입니다.원본 파일이 헤더에 음수(위에서 아래로) 높이를 사용했습니다.예상 — ImageInfo.Height는 항상 양의 크기로 정규화됩니다

FAQ

ImageProbe가 픽셀 데이터를 디코드합니까?

아니요. 모든 메서드는 파일 헤더만 읽습니다 — 차원, 비트 깊이 및 프레임 수 — 픽셀 내용은 절대 읽지 않습니다. 디코딩 및 렌더링은 이 라이브러리의 범위를 벗어납니다.

손상되었거나 잘린 파일을 검사하면 어떻게 됩니까?

ImageProbe는 잘못된 형식이거나 잘린 입력에 대해 예외를 발생시키지 않습니다. 사용 가능한 헤더 바이트에서 확인할 수 있는 필드를 포함한 ImageInfo를 반환합니다 — Format는 포맷 마커 자체가 인식될 때마다 설정됩니다.

시크 가능하지 않은 스트림을 검사할 수 있나요?

예. Probe(stream)는 시크 가능한 스트림과 시크 불가능한 스트림 모두를 받아들입니다.


API Reference 요약

클래스 / 메서드설명
ImageProbe.ProbeFile(path)경로로 파일을 탐색하여 ImageInfo를 반환합니다
ImageProbe.Probe(stream)시크 가능 여부와 관계없이 Stream를 탐색합니다
ImageProbe.Probe(data)원시 byte[]를 탐색합니다
ImageProbe.DetectFormat(stream)스트림에 대해 ImageFormat만 반환합니다.
ImageProbe.DetectFormat(data)byte[]에 대한 ImageFormat만 반환하십시오
ImageInfo결과 유형: Format, Width, Height, BitDepth, FrameCount
ImageFormat열거형: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

참조

 한국어