Pendahuluan
Aspose.Imaging FOSS untuk .NET adalah pustaka gratis, berlisensi MIT, sumber terbuka untuk pengembang .NET yang perlu mengetahui apa itu file gambar is — formatnya, dimensi, kedalaman bit, dan jumlah frame — tanpa harus membayar biaya untuk mendekodenya. Statik ImageProbe kelas adalah titik masuk: ProbeFile(path) membaca dari disk, Probe(stream) and Probe(data) menerima stream atau array byte, dan DetectFormat(stream) / DetectFormat(data) mengembalikan ImageFormat nilai enum tanpa membangun penuh ImageInfo, untuk pemanggil yang hanya perlu bercabang berdasarkan format. Setiap metode probe mengembalikan sebuah ImageInfo objek dengan nullable Width, Height, BitDepth, dan FrameCount properti, diisi hanya ketika header format yang terdeteksi benar-benar membawa nilai tersebut.
Ini adalah alat yang sengaja sempit, dan itulah intinya. Ia tidak mendecode piksel, merender gambar, atau mengonversi antar format — untuk itu, produk komersial Aspose.Imaging untuk .NET adalah pilihan yang tepat (tautan di bawah pada Sumber Terbuka & Lisensi). Apa yang dilakukan Aspose.Imaging FOSS untuk .NET adalah pekerjaan yang jauh lebih kecil, jauh lebih umum, yaitu menjawab “format apa ini, dan seberapa besar?” secepat dan seaman mungkin, untuk kelas masalah di mana decoding penuh akan menjadi pekerjaan yang sia-sia: memvalidasi unggahan, menentukan ukuran tata letak thumbnail, menyeleksi sekumpulan file campuran, atau membaca bidang header DICOM untuk pemeriksaan pra-pemrosesan.
Perpustakaan ini berlisensi MIT tanpa ketergantungan eksternal dan menargetkan netstandard2.0 serta net8.0 — gratis untuk penggunaan sumber terbuka maupun komersial, tanpa royalti atau pembatasan distribusi.
Fitur Utama
Tiga Cara untuk Memeriksa File
ImageProbe menawarkan titik masuk berupa path file, stream, dan array byte, sehingga dapat digunakan di mana pun data gambar sudah berada dalam alur kerja Anda — di disk, sudah di memori, atau datang melalui jaringan. DetectFormat melewatkan pembuatan ImageInfo lengkap ketika Anda hanya perlu menentukan cabang pada format.
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
Hasil Terstruktur, Jujur
ImageInfo mengekspos Format (sebuah nilai enum ImageFormat, selalu diatur setelah header dikenali) bersamaan dengan Width yang dapat bernilai null, Height, BitDepth, dan FrameCount. “Nullable” berperan nyata di sini: pengisian bidang memang bervariasi menurut format, dan ImageInfo tidak pernah memalsukan nilai yang tidak dibawa oleh header format. Memeriksa null sebelum digunakan adalah pola yang benar, bukan pemikiran defensif setelahnya.
var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
11 Format, Termasuk Tiga yang Tidak Ada Lainnya dalam Deteksi .NET FOSS
PNG, JPEG, GIF, BMP, WebP (lossy, lossless, and extended), ICO, TIFF, PSD, EMF, WMF, dan DICOM. Pengisian bidang berbeda per format dengan sengaja, bukan karena penghilangan — PNG menyertakan lebar, tinggi, kedalaman bit, and jumlah frame (meskipun FrameCount adalah hardcoded 1, bukan deteksi frame animated-PNG yang sebenarnya); FrameCount adalah hitungan asli dari ukuran ikon yang disematkan dalam direktori-nya, dan sebuah 0 byte dalam bidang dimensi entri direktori ICO berarti 256px, menurut spesifikasi format; TIFF’s FrameCount mencerminkan penelusuran terbatas pada rantai IFD file, satu IFD per halaman.
Tiga dari sebelas ini — PSD, EMF/WMF, dan DICOM — tidak memiliki detektor .NET gratis dan sumber terbuka lain yang kami ketahui, yang menjadi salah satu alasan utama keberadaan perpustakaan ini.
WMF dan EMF: Dua Format Legacy, Dua Batas yang Berbeda
WMF yang tidak dapat diposisikan masih dapat diidentifikasi dengan benar sebagai ImageFormat.Wmf, tetapi hanya WMF yang dapat diposisikan yang mengisi dimensi — diambil dari batas unit-per-inch pada header melalui konversi 96 DPI yang dikodekan keras, karena WMF sendiri tidak membawa ukuran piksel absolut. EMF tidak memiliki bidang lebar/tinggi yang eksplisit sama sekali; dimensinya berasal dari persegi panjang ruang perangkat rclBounds di header EMF sebagai gantinya. Kedua format tersebut tercermin secara jujur dalam ImageInfo: ketika nilai tidak dapat diturunkan, properti tetap null alih-alih menebak.
Penguraian Header DICOM Tanpa Penampil
ImageProbe membaca header DICOM di seluruh sintaks transfer Implicit VR Little Endian dan Explicit VR Little/Big Endian, mengekstrak Rows ke Height, Columns ke Width, dan BitsAllocated ke BitDepth — tidak memerlukan penampil DICOM atau ketergantungan pemrosesan gambar eksternal. Parsing bersifat konservatif secara desain: elemen urutan dengan panjang tak terdefinisi menghentikan proses alih-alih menebak isinya, sehingga file DICOM yang dipahami sebagian turun menjadi ImageInfo parsial alih-alih yang salah.
Tidak Pernah Melempar pada Input yang Rusak atau Terpotong
Probe dibangun untuk file yang tidak dipercaya, parsial, atau dalam proses. Jika sebuah file cocok dengan tanda tangan format tetapi header-nya tidak dapat sepenuhnya diparsing — unduhan yang terpotong, unggahan yang rusak — hasilnya hanya membawa Format yang terdeteksi alih-alih melempar pengecualian.
byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null
Mulai Cepat
Instal paket, lalu periksa sebuah file dari disk untuk membaca format yang terdeteksi, dimensi, kedalaman bit, dan jumlah frame dalam satu panggilan, diikuti dengan pemeriksaan hanya format menggunakan byte mentah:
git clone https://github.com/aspose-imaging-foss/Aspose.Imaging-FOSS-for-.NET.git
cd Aspose.Imaging-FOSS-for-.NET
dotnet buildusing 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);
Format yang Didukung
Aspose.Imaging FOSS untuk .NET detects semua 11 format di bawah ini dan membaca metadata tingkat header — tidak mendekode data piksel, sehingga tidak ada kemampuan “write” untuk dilaporkan. Pengisian bidang bervariasi menurut format; lihat rincian lengkapnya di Fitur Utama di atas.
| Format | Ekstensi | Detected | Lebar / Tinggi | Kedalaman bit | Jumlah frame |
|---|---|---|---|---|---|
| PNG | .png | ✓ | ✓ | ✓ | ✓ |
| JPEG | .jpg / .jpeg | ✓ | ✓ | ✓ | — |
| GIF | .gif | ✓ | ✓ | — | ✓ |
| BMP | .bmp | ✓ | ✓ | ✓ | — |
| WebP | .webp | ✓ | ✓ | — | — |
| ICO | .ico | ✓ | ✓ | ✓ | ✓ |
| TIFF | .tif / .tiff | ✓ | ✓ | ✓ | ✓ |
| PSD | .psd | ✓ | ✓ | ✓ | — |
| EMF | .emf | ✓ | ✓ (dari batas) | — | — |
| WMF | .wmf | ✓ | ✓ (hanya dapat ditempatkan, 96 DPI) | — | — |
| DICOM | .dcm | ✓ | ✓ (Baris/Kolom) | ✓ (BitsAllocated) | — |
Sumber Terbuka & Lisensi
Aspose.Imaging FOSS untuk .NET berlisensi MIT tanpa ketergantungan eksternal. Lisensi MIT memperbolehkan penggunaan baik dalam proyek sumber terbuka maupun komersial tanpa royalti atau pembatasan pada redistribusi. Kode sumber tersedia di GitHub. Ini sengaja dibatasi hanya untuk deteksi format — untuk penguraian, penyuntingan, atau konversi format gambar ini, lihat Aspose.Imaging untuk .NET — Produk Enterprise.