Cara Bekerja dengan Aspose.Imaging FOSS Core API di .NET

Cara Bekerja dengan Aspose.Imaging FOSS Core API di .NET

Aspose.Imaging FOSS untuk permukaan publik .NET terdiri dari tiga kelas: ImageProbe, ImageInfo, dan ImageFormat. Panduan ini menjelaskan cara menginstal paket dan menggunakan ketiganya bersama-sama untuk mendeteksi format serta membaca metadata header dari file, aliran, dan array byte.

Panduan Langkah demi Langkah

Langkah 1: Instal Paket

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

Paket ini menargetkan net8.0 dan netstandard2.0 serta tidak memiliki dependensi runtime eksternal.


Langkah 2: Impor Namespace

Tambahkan satu perintah using — itu mengekspos ImageProbe, ImageInfo, dan ImageFormat, seluruh permukaan API, sehingga tidak ada hal lain yang perlu diimpor:

using Aspose.Imaging.Foss;

Langkah 3: Memeriksa File Berdasarkan Jalur

ImageProbe.ProbeFile membaca cukup header file untuk mengisi hasil ImageInfo — ia tidak pernah mendekode data piksel:

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

Langkah 4: Memeriksa Stream atau Array Byte

Ketika gambar sudah berada di memori atau berasal dari stream (unggahan, respons jaringan), gunakan overload yang menerima langsung itu alih-alih menulis ke file sementara terlebih dahulu:

byte[] bytes = File.ReadAllBytes("photo.jpg");
var infoFromBytes = ImageProbe.Probe(bytes);

using var stream = File.OpenRead("photo.jpg");
var infoFromStream = ImageProbe.Probe(stream);

Probe(stream) bekerja dengan stream yang dapat seek dan yang tidak dapat seek.


Langkah 5: Gunakan DetectFormat Ketika Anda Hanya Membutuhkan Format

Jika Anda hanya perlu membranch berdasarkan format dan tidak memerlukan dimensi, kedalaman bit, atau jumlah frame, DetectFormat melewati sisa parsing header:

var format = ImageProbe.DetectFormat(bytes);
if (format == ImageFormat.Dicom)
{
    // route to DICOM-specific handling
}

Langkah 6: Baca Bidang ImageInfo yang Dapat Bernilai Null dengan Aman

Width, Height, BitDepth, dan FrameCount dapat bernilai null — mereka hanya diisi ketika header format yang terdeteksi memang membawa nilai tersebut. Format adalah satu bidang yang selalu diatur setelah header dikenali:

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}
else
{
    Console.WriteLine($"{info.Format}: dimensions not available in this header");
}

Masalah Umum dan Solusinya

Format ditampilkan sebagai ImageFormat.Unknown. Header file tidak cocok dengan salah satu dari 11 format yang dikenali (PNG, JPEG, GIF, BMP, WebP, ICO, TIFF, PSD, EMF, WMF, DICOM). Pastikan file memang salah satu format tersebut — ImageProbe tidak pernah melempar kesalahan untuk header yang tidak dikenali, ia melaporkan Unknown sebagai gantinya.

Width/Height are null meskipun Format diatur. Tidak setiap header format memiliki semua field, dan file yang terpotong mungkin berakhir sebelum byte sebuah field. Periksa Format terlebih dulu, lalu perlakukan sisanya sebagai opsional.

Calling Probe when DetectFormat akan melakukannya. Probe and ProbeFile mengurai seluruh header; DetectFormat hanya membaca cukup untuk mengidentifikasi format. Gunakan DetectFormat jika Anda tidak pernah membaca Width/Height/BitDepth/FrameCount.

Mengharapkan data piksel yang terdekripsi. ImageProbe tidak pernah mendekode, merender, atau mengonversi konten gambar — hanya membaca metadata header. Dekode dan operasi tingkat piksel memerlukan SDK komersial Aspose.Imaging.

Pertanyaan yang Sering Diajukan

Apa yang terjadi jika saya melakukan probe pada file yang terpotong atau rusak?

ImageProbe tidak pernah melempar pada input yang salah format atau terpotong. Ia mengembalikan ImageInfo parsial — Format diatur setiap kali penanda format header dikenali, walaupun sisa file terpotong.

Apakah ImageProbe thread-safe?

Ya. ImageProbe bersifat statis dan tidak menyimpan keadaan yang dapat diubah di antara panggilan, sehingga panggilan bersamaan dari beberapa thread aman.

Bisakah saya membuat ImageInfo secara langsung, tanpa melakukan probe pada file nyata?

Ya. Konstruktor ImageInfo bersifat publik dengan hanya format yang diperlukan — berguna untuk membuat test double: new ImageInfo(ImageFormat.Png, width: 64, height: 48).

Apakah saya perlu melakukan dispose apa pun?

No. ImageProbe tidak memiliki sumber daya IDisposable miliknya sendiri. Jika Anda melewatkan Stream yang Anda buka sendiri, Anda tetap bertanggung jawab untuk membuangnya.

Lihat Juga

 Bahasa Indonesia