코어 API
코어 API
Aspose.Imaging .NET의 전체 공개 표면에 대한 FOSS는 세 가지 클래스입니다: ImageProbe (정적 파사드), ImageInfo (결과 값), 그리고 ImageFormat (포맷 열거형). 이 페이지에서는 각 기능별 투어를 넘어 계약으로서 이들이 어떻게 결합되는지를 다룹니다. 기능 및 특성.
세 클래스 계약
ImageProbe— 정적, 무상태. 모든 호출은 독립적이며; 구성하거나 해제할 것이 없습니다.ImageInfo— 봉인된, 불변. 다섯 개 속성 모두 (Format,Width,Height,BitDepth,FrameCount)는 생성된 후 읽기 전용입니다.ImageFormat— 인식된 각 형식마다 하나의 값을 갖는 열거형이며, 추가로Unknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries it직접 ImageInfo 생성하기
ImageInfo의 생성자는 public이며 — format만 필요하고, 다른 모든 매개변수는 null로 기본값이 지정됩니다. 이는 실제 파일을 조사하지 않고도 대체 결과가 필요한 단위 테스트에 유용합니다:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);이에 해당하는 방법이 없습니다 mutate an ImageInfo 구성 후 — 모든 속성이 읽기 전용이므로, 탐색되었거나 생성된 인스턴스를 방어적 복사 없이도 자유롭게 전달하고 캐시해도 안전합니다.
올바른 오버로드 선택
| Overload | 다음과 같은 경우에 사용 |
|---|---|
ImageProbe.ProbeFile(path) | 파일 경로가 있고 전체 ImageInfo를 원합니다 |
ImageProbe.Probe(stream) | 이미 열려 있는 Stream(시크 가능한지 여부와 관계없이)가 있고 전체 ImageInfo를 원합니다 |
ImageProbe.Probe(data) | 이미 메모리에 바이트가 있고 전체 ImageInfo을(를) 원합니다. |
ImageProbe.DetectFormat(stream) / (data) | 당신은 ImageFormat에 따라 분기만 하면 됩니다 — 포맷 시그니처를 넘어선 헤더 파싱은 건너뛰세요. |
ProbeFile가 파일을 직접 열고 읽습니다 — Probe(stream)를 호출하기 위해 먼저 FileStream를 열 필요가 없습니다.
디렉터리 일괄 탐색
ImageProbe이(가) 예외를 전혀 발생시키지 않기 때문에, 디렉터리 스캔은 파일당 try/catch 없이도 빡빡한 루프에서 호출할 수 있습니다:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}헤더가 11가지 인식된 포맷 중 하나와 일치하지 않는 모든 파일은 예외를 발생시키는 대신 ImageFormat.Unknown으로 해석됩니다 — 위 루프는 절대 catch 블록이 필요하지 않습니다.
예외 미발생 계약
이는 우연한 동작이 아니라 — API 계약의 의도적인 부분입니다. 인식된 포맷의 헤더가 파싱 도중 잘리거나 형식이 잘못되었더라도, ImageProbe은 여전히 ImageInfo을 반환하고, Format는 인식된 포맷으로 설정됩니다; 호출자에게 파싱 예외를 전파하지 않습니다. 보장되는 것은 오직 Format뿐이며 — 감지된 포맷에 관계없이 다른 모든 속성을 선택 사항으로 간주하십시오.
일반 문제
| 문제 | 원인 | 해결책 |
|---|---|---|
구성된 ImageInfo이(가) 실제 프로브 결과와 일치하지 않습니다. | 수동으로 만든 인스턴스는 필드 간 일관성을 검증하지 않습니다 | 수동 구성을 테스트 더블에만 사용하고, 실제 파일을 탐색하는 대체 수단으로 사용하지 마세요 |
DetectFormat이면 충분한데 Probe를 호출하고 있습니다 | 형식만 필요할 때 불필요한 헤더 파싱이 수행됩니다 | 한 번도 Width/Height/BitDepth/FrameCount를 읽지 않을 경우 DetectFormat를 사용하세요 |
지원될 것으로 예상되는 파일에 대한 Unknown 형식 | 헤더가 11개의 인식된 서명 중 어느 것과도 일치하지 않거나, 파일이 전혀 다른 형식입니다 | 파일을 다음과 대조하여 확인하세요 지원되는 포맷 목록 |
FAQ
제가 ImageInfo 또는 ImageProbe를 서브클래스화할 수 있나요?
아니요. ImageInfo는 sealed이고 ImageProbe는 static입니다 — 두 경우 모두 서브클래싱이나 상속을 통한 인스턴스화를 위해 설계되지 않았습니다.
ImageProbe는 스레드 안전합니까?
ImageProbe는 호출 사이에 변할 수 있는 상태를 보유하지 않습니다 — Probe, ProbeFile, 또는 DetectFormat에 대한 각 호출은 독립적이며, 여러 스레드에서 동시에 호출해도 안전합니다.
무언가를 해제해야 합니까?
아니요. ImageProbe는 자체적으로 IDisposable 리소스를 가지고 있지 않습니다. 직접 연 Stream를 전달한 경우, 해당 스트림을 해제할 책임은 사용자에게 남아 있습니다 — Probe(stream)는 이를 닫지 않습니다.
API Reference 요약
| 클래스 / 메서드 | 설명 |
|---|---|
ImageProbe.ProbeFile(path) | 경로를 통해 파일을 탐색 |
ImageProbe.Probe(stream) | 탐색 Stream |
ImageProbe.Probe(data) | 탐색 byte[] |
ImageProbe.DetectFormat(stream) | 포맷만, Stream에서 |
ImageProbe.DetectFormat(data) | 형식만, byte[]에서 |
ImageInfo(format, width, height, bitDepth, frameCount) | 공개 생성자 — format만 필요합니다 |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | 읽기 전용 결과 속성 |
ImageFormat | 열거형: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |