บทนำ
Aspose.Imaging FOSS สำหรับ .NET เป็นไลบรารีฟรีที่ใช้สัญญาอนุญาต MIT และเป็นซอร์สเปิดสำหรับนักพัฒนา .NET ที่ต้องการทราบว่าไฟล์รูปภาพเป็นอะไร is — รูปแบบ, มิติ, ความลึกบิต, และจำนวนเฟรม — โดยไม่ต้องเสียค่าใช้จ่ายในการถอดรหัสมัน. คลาส static ImageProbe class เป็นจุดเริ่มต้น: ProbeFile(path) อ่านจากดิสก์, Probe(stream) and Probe(data) รับสตรีมหรืออาร์เรย์ไบต์, และ DetectFormat(stream) / DetectFormat(data) ส่งคืน ImageFormat ค่าประเภท enum โดยไม่ต้องสร้างเต็ม ImageInfo, สำหรับผู้เรียกที่ต้องการแยกตามรูปแบบเท่านั้น. ทุกวิธีการตรวจสอบจะส่งคืน ImageInfo อ็อบเจ็กต์ที่มี nullable Width, Height, BitDepth, และ FrameCount คุณสมบัติ, เติมค่าเฉพาะเมื่อส่วนหัวของรูปแบบที่ตรวจจับได้จริง ๆ มีค่านั้น.
นี่เป็นเครื่องมือที่ออกแบบให้แคบโดยเจตนา และนั่นแหละคือจุดประสงค์. มันไม่ทำการถอดรหัสพิกเซล, แสดงผลภาพ, หรือแปลงรูปแบบ — สำหรับสิ่งนั้น, ผลิตภัณฑ์เชิงพาณิชย์ Aspose.Imaging สำหรับ .NET เป็นตัวเลือกที่เหมาะสม (ลิงก์ด้านล่างภายใต้ โอเพนซอร์ส & ไลเซนส์). สิ่งที่ Aspose.Imaging FOSS สำหรับ .NET ทำคือหน้าที่ที่เล็กกว่าและพบได้บ่อยกว่ามาก คือการตอบว่า “รูปแบบนี้คืออะไรและขนาดเท่าไหร่?” อย่างเร็วที่สุดและปลอดภัยที่สุด, สำหรับประเภทของปัญหาที่การถอดรหัสเต็มรูปแบบจะเป็นการทำงานที่เสียเปล่า: ตรวจสอบการอัปโหลด, กำหนดขนาดการจัดวางรูปย่อ, แยกไฟล์ผสมหลายไฟล์, หรืออ่านฟิลด์หัวเรื่อง 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 (ค่าที่เป็น enum ของ ImageFormat, จะถูกตั้งค่าเสมอเมื่อหัวข้อได้รับการจดจำ) ควบคู่กับ Width ที่เป็น nullable, 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}");
}
รูปแบบ 11 แบบ, รวมถึงสามแบบที่ไม่มีอะไรอื่นในพื้นที่ตรวจจับ .NET ของ FOSS
PNG, JPEG, GIF, BMP, WebP (lossy, lossless, and extended), ICO, TIFF, PSD, EMF, WMF, และ DICOM. การเติมฟิลด์จะแตกต่างตามรูปแบบโดยเจตนา ไม่ได้เนื่องจากการละเว้น — PNG มีความกว้าง, ความสูง, ความลึกบิต, and จำนวนเฟรม (แม้ว่า FrameCount เป็นค่าที่กำหนดไว้ล่วงหน้า 1, ไม่ใช่การตรวจจับเฟรม animated-PNG จริง); FrameCount เป็นจำนวนที่แท้จริงของขนาดไอคอนที่ฝังอยู่ในไดเรกทอรีของมัน, และ a 0 ไบต์ในฟิลด์มิติของรายการไดเรกทอรี ICO หมายถึง 256px ตามสเปคฟอร์แมต; TIFF’s FrameCount สอดคล้องกับการเดินแบบจำกัดของโซ่ IFD ของไฟล์, หนึ่ง IFD ต่อหน้า.
สามในสิบเอ็ดรูปแบบนี้ — PSD, EMF/WMF, และ DICOM — ไม่มีตัวตรวจจับ .NET ฟรีและโอเพ่นซอร์สอื่นที่เราทราบอยู่, ซึ่งเป็นส่วนสำคัญที่ทำให้ไลบรารีนี้มีอยู่.
WMF และ EMF: สองรูปแบบเก่า, ขีดจำกัดที่แตกต่างกันสองแบบ
WMF ที่ไม่สามารถวางได้ยังคงถูกระบุอย่างถูกต้องเป็น ImageFormat.Wmf, แต่เฉพาะ WMF ที่สามารถวางได้เท่านั้นที่เติมมิติ — ได้มาจากขอบเขตหน่วยต่ออินช์ของหัวเรื่องผ่านการแปลง 96 DPI ที่กำหนดค่าไว้ล่วงหน้า, เนื่องจาก WMF เองไม่มีขนาดพิกเซลที่เป็นค่าสัมบูรณ์. EMF ไม่มฟิลด์ความกว้าง/ความสูงอย่างชัดเจนเลย; มิติของมันมาจากสี่เหลี่ยมอุปกรณ์ rclBounds ในหัวเรื่อง EMF แทน. ทั้งสองถูกสะท้อนอย่างตรงไปตรงมาใน ImageInfo: เมื่อค่าไม่สามารถสรุปได้, คุณสมบัติจึงคงเป็น null แทนการเดา.
การแยกวิเคราะห์หัวเรื่อง DICOM โดยไม่มีโปรแกรมดู
ImageProbe อ่านหัวข้อ DICOM ทั่วทั้งโครงแบบการถ่ายโอน Implicit VR Little Endian และ Explicit VR Little/Big Endian, ดึง 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 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);
รูปแบบที่รองรับ
Aspose.Imaging FOSS for .NET detects ทั้ง 11 ฟอร์แมตด้านล่างและอ่านเมทาดาต้าระดับหัวไฟล์ — มันไม่ถอดรหัสข้อมูลพิกเซล ดังนั้นจึงไม่มีความสามารถในการ “เขียน” ที่จะรายงาน. การเติมฟิลด์จะแตกต่างตามฟอร์แมต; ดูการแยกรายละเอียดในส่วน คุณสมบัติหลัก ด้านบน.
| ฟอร์แมต | ส่วนขยาย | 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 สำหรับ .NET มีใบอนุญาต MIT โดยไม่มีการพึ่งพาภายนอกใดๆ. ใบอนุญาต MIT อนุญาตให้ใช้ในโครงการโอเพนซอร์สและเชิงพาณิชย์ได้โดยไม่มีค่าลิขสิทธิ์หรือข้อจำกัดในการกระจายซ้ำ. ซอร์สโค้ดพร้อมให้บริการบน GitHub. มันถูกจำกัดไว้เพื่อการตรวจจับรูปแบบเท่านั้น — หากต้องการถอดรหัส, แก้ไข หรือแปลงรูปแบบภาพเหล่านี้ โปรดดู Aspose.Imaging สำหรับ .NET — ผลิตภัณฑ์ระดับองค์กร.