Fitur dan Fungsionalitas

Fitur dan Fungsionalitas

Fitur dan Fungsionalitas

Halaman ini mencakup setiap area fitur Aspose.Imaging FOSS untuk .NET’s format-detection dan header-probing API, dengan contoh C# yang berfungsi. Perpustakaan ini tidak pernah mendekode data piksel — setiap metode hanya membaca header file.


Deteksi Format

ImageProbe adalah titik masuk statis. Tiga overload mencakup jalur file, aliran, dan array byte mentah:

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

Gunakan DetectFormat ketika Anda hanya perlu membranch berdasarkan format; gunakan Probe/ProbeFile ketika Anda juga memerlukan dimensi, kedalaman bit, atau jumlah frame.


Membaca Metadata Header

ProbeFile/Probe mengembalikan sebuah ImageInfo dengan Width yang dapat bernilai null, Height, BitDepth, dan FrameCount — masing-masing diisi hanya ketika header format yang terdeteksi benar-benar membawa nilai tersebut:

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

Format (sebuah nilai enum ImageFormat) selalu diatur begitu header dikenali — itu satu-satunya bidang yang dijamin terisi.


Catatan Per-Format

Beberapa format memiliki keanehan header yang ImageInfo menormalkan atau mengekspose secara langsung:

FormatBehavior
GIFFrameCount mencerminkan jumlah frame ketika file berisi beberapa frame; dihilangkan jika jumlah tidak dapat ditentukan
BMPKetinggian negatif pada header (urutan baris atas ke bawah) dinormalisasi — Height mengembalikan nilai positifnya
DICOMParsing header menangani sintaks transfer Implicit VR Little Endian dan Explicit VR Little/Big Endian, mengekstrak baris, kolom, dan bit yang dialokasikan
// 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");

Format yang Didukung

Semua 11 format terdeteksi dengan cara yang sama — ImageProbe mengidentifikasi format dan membaca metadata header; ia tidak pernah mendekode atau mengkode ulang data piksel untuk satupun di antaranya. Pengisian bidang memang berbeda-beda per format, namun — setiap format mengatur Format, tetapi hanya beberapa yang menyertakan kedalaman bit atau jumlah frame di header mereka:

FormatLebar / TinggiKedalaman bitJumlah frame
PNG✓✓✓
JPEG✓✓—
GIF✓—✓
BMP✓✓—
WebP✓——
ICO✓✓✓
TIFF✓✓✓
PSD✓✓—
EMF✓ (dari batas)——
WMF (dapat ditempatkan)✓ (mengasumsikan 96 DPI)——
DICOM✓ (Baris/Kolom)✓ (BitsAllocated)—

Header yang tidak dikenali akan diubah menjadi ImageFormat.Unknown alih-alih melemparkan kesalahan. Beberapa detail penting tentang pengisian bidang: FrameCount pada PNG selalu 1 (sebuah konstanta, bukan deteksi frame PNG animasi yang sebenarnya); FrameCount pada ICO adalah hitungan asli ukuran ikon yang tertanam dalam direktori, dan byte dimensi 0 dalam entri direktori ICO berarti 256px sesuai spesifikasi format; FrameCount pada TIFF mencerminkan penelusuran terbatas pada rantai IFD file (setiap IFD adalah satu halaman); WMF yang tidak dapat diposisikan masih diidentifikasi dengan benar sebagai ImageFormat.Wmf tetapi hanya mengembalikan Format — dimensi hanya terisi untuk WMF yang dapat diposisikan, melalui konversi keras 96 DPI dari batas unit-per-inch pada header; EMF tidak memiliki bidang lebar/tinggi yang eksplisit sama sekali, sehingga dimensinya diambil dari persegi panjang ruang perangkat rclBounds sebagai gantinya.


Tangguh secara Desain

ImageProbe tidak pernah melemparkan kesalahan pada input yang rusak atau terpotong. Alih-alih mengeluarkan pengecualian, ia mengembalikan ImageInfo parsial — Format diatur setiap kali penanda format header dikenali, bahkan ketika sisa file terpotong atau korup:

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

Ini membuatnya aman dijalankan terhadap unduhan yang tidak terpercaya, parsial, atau sedang berlangsung tanpa try/catch di setiap pemanggilan.


Tips dan Praktik Terbaik

  • Gunakan DetectFormat alih-alih Probe ketika Anda hanya membutuhkan format, bukan dimensi
  • Periksa Width/Height/BitDepth/FrameCount untuk null sebelum menggunakannya — mereka tidak diisi untuk setiap format
  • Lebih pilih Probe(stream) daripada membaca seluruh file ke dalam array byte terlebih dahulu saat bekerja dengan file besar
  • ImageProbe sepenuhnya statis — tidak ada instance, tidak ada IDisposable, tidak ada objek konfigurasi

Masalah Umum

MasalahPenyebabPerbaikan
Format adalah ImageFormat.UnknownHeader tidak cocok dengan salah satu dari 11 format yang dikenaliPastikan file tersebut merupakan salah satu dari PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, atau DICOM
Width/Height adalah nullHeader format tidak memuat bidang itu, atau header terpotong sebelum bidang tersebutPeriksa Format terlebih dahulu; tidak setiap bidang terisi untuk setiap format
Tinggi BMP tampak secara tak terduga positifFile sumber menggunakan tinggi negatif (dari atas ke bawah) di headernyaExpected — ImageInfo.Height selalu menormalkan ke magnitudo positif

FAQ

Apakah ImageProbe mendekode data piksel?

Tidak. Setiap metode hanya membaca header file — dimensi, kedalaman bit, dan jumlah frame — tidak pernah konten piksel. Dekode dan rendering berada di luar cakupan perpustakaan ini.

Apa yang terjadi jika saya memeriksa file yang rusak atau terpotong?

ImageProbe tidak pernah melempar pengecualian untuk masukan yang rusak atau terpotong. Ia mengembalikan sebuah ImageInfo dengan bidang apa pun yang dapat ditentukan dari byte header yang tersedia — Format diatur setiap kali penanda format itu sendiri dikenali.

Apakah saya dapat memeriksa stream yang tidak dapat di-seek?

Ya. Probe(stream) menerima stream yang dapat di-seek maupun yang tidak dapat di-seek.


API Reference Ringkasan

Kelas / MetodeDeskripsi
ImageProbe.ProbeFile(path)Uji file berdasarkan jalur, mengembalikan sebuah ImageInfo
ImageProbe.Probe(stream)Uji Stream (seekable atau tidak)
ImageProbe.Probe(data)Uji byte[] mentah
ImageProbe.DetectFormat(stream)Kembalikan hanya ImageFormat untuk stream
ImageProbe.DetectFormat(data)Kembalikan hanya ImageFormat untuk byte[]
ImageInfoTipe hasil: Format, Width, Height, BitDepth, FrameCount
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

Lihat Juga

 Bahasa Indonesia