소개

Aspose.Imaging FOSS for .NET은(는) 이미지 파일이 무엇인지 알아야 하는 .NET 개발자를 위한 무료 MIT 라이선스 오픈소스 라이브러리입니다 is — 그 형식, 차원, 비트 깊이, 그리고 프레임 수 —를 디코딩 비용을 들이지 않고 확인할 수 있습니다. 정적 ImageProbe 클래스가 진입점입니다: ProbeFile(path) 디스크에서 읽습니다, Probe(stream) and Probe(data) 스트림 또는 바이트 배열을 받아들이고, DetectFormat(stream) / DetectFormat(data) 반환합니다 ImageFormat 전체를 구축하지 않고 enum 값을 ImageInfo, 형식에 따라 분기만 하면 되는 호출자를 위해. 모든 probe 메서드는 an ImageInfo nullable이 있는 객체 Width, Height, BitDepth, 그리고 FrameCount 속성은 감지된 포맷의 헤더가 실제로 해당 값을 가지고 있을 때만 채워집니다.

이 도구는 의도적으로 좁은 범위만을 다루며, 그것이 바로 목적입니다. 픽셀을 디코딩하거나 이미지를 렌더링하거나 포맷 간 변환을 수행하지 않습니다 — 이를 위해서는 .NET용 상업용 Aspose.Imaging 제품이 적합합니다 (아래 오픈 소스 및 라이선스 항목에 링크됨). .NET용 Aspose.Imaging FOSS이 수행하는 일은 훨씬 작고 더 일반적인 작업, 즉 “이 파일의 포맷은 무엇이며, 크기는 얼마나 되는가?”에 가능한 한 빠르고 안전하게 답하는 것입니다. 전체 디코딩이 불필요한 상황, 예를 들어 업로드 검증, 썸네일 레이아웃 크기 측정, 혼합 파일 배치의 우선순위 판단, 혹은 전처리 검사를 위한 DICOM 헤더 필드 읽기 등에 적합합니다.

이 라이브러리는 MIT 라이선스를 적용받으며 외부 종속성이 전혀 없고 netstandard2.0와 net8.0 모두를 대상으로 합니다 — 오픈소스든 상업용이든 자유롭게 사용할 수 있으며, 로열티나 재배포 제한이 없습니다.


주요 기능

파일을 탐색하는 세 가지 방법

ImageProbe은 파일 경로, 스트림, 바이트 배열 진입점을 제공하므로 이미지 데이터가 파이프라인 어디에 있든—디스크에 있든, 메모리에 이미 있든, 혹은 전송 중이든—잘 맞습니다. 포맷에 따라 분기만 필요할 때 DetectFormat은 전체 ImageInfo를 구축하는 과정을 생략합니다.

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

구조화된, 정직한 결과

ImageInfo은 Format을(를) 노출합니다 (헤더가 인식되면 항상 설정되는 ImageFormat 열거형 값). 또한 nullable Width, Height, BitDepth, FrameCount와 함께 제공합니다. 여기서 “Nullable”은 실제 역할을 합니다: 필드 채우기는 형식마다 실제로 다르며, ImageInfo은 형식 헤더에 존재하지 않는 값을 절대로 만들어내지 않습니다. 사용 전에 null을(를) 확인하는 것이 올바른 패턴이며, 사후 방어적 사고가 아닙니다.

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

FOSS .NET 공간에서 감지되는 11가지 포맷, 그 중 세 가지는 그 외에 아무 것도 감지되지 않음

PNG, JPEG, GIF, BMP, WebP (손실, 무손실, 그리고 확장), ICO, TIFF, PSD, EMF, WMF, 그리고 DICOM. 필드 채워짐은 의도적으로 포맷마다 다르며, 누락 때문이 아닙니다 — PNG는 너비, 높이, 비트 깊이를 포함합니다, and 프레임 수 (하지만 FrameCount 는 하드코딩된 1, 실제 animated-PNG 프레임 감지가 아니라); FrameCount 는 디렉터리 내에 포함된 아이콘 크기의 실제 개수이며, 그리고 a 0 ICO 디렉터리 항목의 차원 필드에 있는 바이트는 형식 사양에 따라 256px를 의미합니다; TIFF의 FrameCount 파일의 IFD 체인의 제한된 탐색을 반영하며, 페이지당 하나의 IFD가 있습니다.

이 11개 중 세 가지 — PSD, EMF/WMF, 그리고 DICOM — 은 우리가 알기로 다른 무료 오픈소스 .NET 탐지기가 없으며, 이것이 이 라이브러리가 존재하는 실제 이유 중 하나입니다.

WMF와 EMF: 두 개의 레거시 포맷, 두 가지 다른 제한

비배치형 WMF는 여전히 정확히 ImageFormat.Wmf으로 식별되지만, 차원을 채우는 것은 배치형 WMF만 가능합니다 — 헤더의 인치당 단위 범위에서 하드코딩된 96 DPI 변환을 통해 파생되며, WMF 자체는 절대 픽셀 크기를 포함하지 않기 때문입니다. EMF는 명시적인 너비/높이 필드가 전혀 없으며, 차원은 대신 EMF 헤더에 있는 rclBounds 장치 공간 사각형에서 가져옵니다. 두 경우 모두 ImageInfo에 솔직하게 반영됩니다: 값을 도출할 수 없을 때는 속성이 null 상태를 유지하며 추측하지 않습니다.

뷰어 없이 DICOM 헤더 파싱

ImageProbe은(는) Implicit VR Little Endian 및 Explicit VR Little/Big Endian 전송 구문 전반에 걸쳐 DICOM 헤더를 읽으며, Rows을(를) Height에, Columns을(를) Width에, BitsAllocated을(를) BitDepth에 추출합니다 — DICOM 뷰어나 외부 이미지 종속성이 전혀 필요하지 않습니다. 파싱은 설계상 보수적으로 이루어집니다: 정의되지 않은 길이의 시퀀스 요소가 발견되면 내용을 추측하지 않고 탐색을 중단하므로, 부분적으로 이해된 DICOM 파일은 잘못된 결과 대신 부분적인 ImageInfo로 축소됩니다.

잘못된 형식 또는 잘린 입력에서도 예외를 발생시키지 않음.

Probe은(는) 신뢰할 수 없고, 부분적이거나 전송 중인 파일을 위해 설계되었습니다. 파일이 형식 서명과 일치하지만 헤더를 완전히 파싱할 수 없는 경우 — 다운로드가 잘리거나 업로드가 손상된 경우 — 결과는 예외 대신 감지된 Format만을 포함합니다.

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

빠른 시작

패키지를 설치한 후, 디스크에서 파일을 검사하여 감지된 형식, 차원, 비트 깊이 및 프레임 수를 한 번에 읽고, 이어서 원시 바이트를 사용한 형식 전용 검사를 수행합니다:

git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet build
using Aspose.Imaging.Foss;

var info = ImageProbe.ProbeFile("photo.jpg");
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}, {info.BitDepth}-bit, " +
                   $"{info.FrameCount ?? 0} frame(s)");

// Format-only detection when dimensions aren't needed
var bytes = File.ReadAllBytes("photo.jpg");
var format = ImageProbe.DetectFormat(bytes);

지원되는 형식

Aspose.Imaging FOSS에 대한 .NET detects 아래 11가지 형식 모두에 대해 헤더 수준 메타데이터를 읽습니다 — 픽셀 데이터를 디코딩하지 않으므로 보고할 “write” 기능이 없습니다. 필드 채우기는 형식마다 다르며, 자세한 분류는 위의 주요 기능 섹션을 참고하십시오.

형식확장자Detected너비 / 높이비트 깊이프레임 수
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (경계에서)——
WMF.wmf✓✓ (배치 가능만, 96 DPI)——
DICOM.dcm✓✓ (행/열)✓ (BitsAllocated)—

오픈 소스 및 라이선스

Aspose.Imaging FOSS for .NET은(는) 외부 종속성이 전혀 없는 MIT 라이선스로 제공됩니다. MIT 라이선스는 로열티나 재배포 제한 없이 오픈 소스 및 상업 프로젝트 모두에서 사용을 허용합니다. 소스는 GitHub에서 확인할 수 있습니다. 이는 형식 감지에만 의도적으로 범위가 제한된 것으로, 이러한 이미지 형식을 디코딩, 편집 또는 변환하려면 Aspose.Imaging를 .NET — Enterprise Product용으로 참고하십시오.


시작하기

관련 리소스