บทนำ

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 build
using 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 — ผลิตภัณฑ์ระดับองค์กร.


เริ่มต้นใช้งาน

แหล่งข้อมูลที่เกี่ยวข้อง