Core API
API หลัก
Aspose.Imaging FOSS สำหรับพื้นผิวสาธารณะทั้งหมดของ .NET มีสามคลาส: ImageProbe (ส่วนหน้าแบบคงที่), ImageInfo (ค่าผลลัพธ์), และ ImageFormat (enum รูปแบบ). หน้านี้ครอบคลุมว่าพวกมันทำงานร่วมกันอย่างไรในฐานะสัญญา, เกินการทัวร์ตามคุณลักษณะใน คุณลักษณะและฟังก์ชัน.
สัญญาสามคลาส
ImageProbe— คงที่, ไม่เก็บสถานะ. ทุกการเรียกเป็นอิสระ; ไม่มีอะไรให้กำหนดค่า หรือทำลาย.ImageInfo— ปิด, ไม่เปลี่ยนแปลง. คุณสมบัติทั้งหมดห้าข้อ (Format,Width,Height,BitDepth,FrameCount) เป็นแบบอ่านอย่างเดียวหลังจากสร้างเสร็จ.ImageFormat— enum ที่มีค่าหนึ่งค่าแต่ละรูปแบบที่รู้จัก, พร้อมกับUnknown.
using Aspose.Imaging.Foss;
var info = ImageProbe.ProbeFile("photo.jpg");
ImageFormat format = info.Format; // always set
int? width = info.Width; // set only when the format's header carries itการสร้าง ImageInfo โดยตรง
ImageInfo มีคอนสตรัคเตอร์เป็นสาธารณะ — ต้องการเฉพาะ format เท่านั้น, พารามิเตอร์อื่นทั้งหมดมีค่าเริ่มต้นเป็น null. สิ่งนี้มีประโยชน์สำหรับการทดสอบหน่วยที่ต้องการผลลัพธ์แทนโดยไม่ต้องตรวจสอบไฟล์จริง:
using Aspose.Imaging.Foss;
// Fake a PNG result for a test double, with no dimensions
var fakeInfo = new ImageInfo(ImageFormat.Png);
// Fake a fully-populated result
var fullInfo = new ImageInfo(ImageFormat.Gif, width: 64, height: 48, bitDepth: 8, frameCount: 3);ไม่มีวิธีที่สอดคล้องกันเพื่อ mutate an ImageInfo หลังจากการสร้าง — ทุกคุณสมบัติมีการอ่านอย่างเดียว, ดังนั้นอินสแตนซ์ที่ถูกสำรวจหรือสร้างขึ้นจึงปลอดภัยต่อการส่งต่อและแคชโดยไม่ต้องคัดลอกป้องกัน.
การเลือกโอเวอร์โหลดที่เหมาะสม
| Overload | ใช้เมื่อ |
|---|---|
ImageProbe.ProbeFile(path) | คุณมีเส้นทางไฟล์และต้องการ ImageInfo เต็มรูปแบบ |
ImageProbe.Probe(stream) | คุณมี Stream ที่เปิดอยู่แล้ว (seekable หรือไม่) และต้องการ ImageInfo อย่างเต็ม |
ImageProbe.Probe(data) | คุณมีไบต์ในหน่วยความจำแล้วและต้องการ ImageInfo ฉบับเต็ม |
ImageProbe.DetectFormat(stream) / (data) | คุณต้องแยกสาขาเฉพาะที่ ImageFormat — ข้ามการวิเคราะห์ส่วนหัวที่เกินลายเซ็นของรูปแบบ |
ProbeFile เปิดและอ่านไฟล์โดยตรง — ไม่จำเป็นต้องเปิด FileStream ก่อนเพียงเพื่อเรียก Probe(stream).
การตรวจสอบไดเรกทอรีแบบแบตช์
เนื่องจาก ImageProbe ไม่เคยโยนข้อยกเว้น การสแกนไดเรกทอรีสามารถเรียกใช้มันในลูปที่แน่นหนาโดยไม่มีการใช้ try/catch ต่อไฟล์:
using Aspose.Imaging.Foss;
foreach (var path in Directory.GetFiles("incoming"))
{
var info = ImageProbe.ProbeFile(path);
if (info.Format == ImageFormat.Unknown)
{
Console.WriteLine($"{path}: not a recognized image format, skipping");
continue;
}
Console.WriteLine($"{path}: {info.Format} {info.Width}x{info.Height}");
}ไฟล์ใด ๆ ที่ส่วนหัวไม่ตรงกับหนึ่งใน 11 รูปแบบที่ได้รับการรับรู้จะถูกแก้ไขเป็น ImageFormat.Unknown แทนการโยนข้อผิดพลาด — วนลูปข้างบนไม่จำเป็นต้องมีบล็อก catch.
สัญญาไม่โยนข้อยกเว้น
นี่ไม่ใช่พฤติกรรมโดยบังเอิญ — มันเป็นส่วนที่ตั้งใจของสัญญา API. หากส่วนหัวของรูปแบบที่ได้รับการยอมรับถูกตัดหรือมีรูปแบบผิดพลาดระหว่างการแยกวิเคราะห์, ImageProbe ยังคงคืนค่า ImageInfo ที่มี Format ตั้งเป็นรูปแบบที่มันจดจำได้; มันไม่ส่งต่อข้อยกเว้นการแยกวิเคราะห์ไปยังผู้เรียก. มีเพียง Format ที่รับประกัน — ปฏิบัติกับคุณสมบัติอื่นทั้งหมดเป็นทางเลือกโดยไม่คำนึงถึงว่ารูปแบบใดถูกตรวจพบ.
ปัญหาทั่วไป
| ปัญหา | สาเหตุ | วิธีแก้ |
|---|---|---|
ค่า ImageInfo ที่สร้างขึ้นไม่ตรงกับผลการตรวจสอบจริง | อินสแตนซ์ที่สร้างด้วยตนเองไม่ตรวจสอบความสอดคล้องระหว่างฟิลด์ | ใช้การสร้างด้วยตนเองเฉพาะสำหรับ test doubles เท่านั้น, ไม่ใช่เป็นทางเลือกแทนการสำรวจไฟล์จริง |
เรียก Probe ขณะที่ DetectFormat เพียงพอ | การพาร์สหัวไฟล์ที่ไม่จำเป็นเมื่อต้องการเพียงรูปแบบเท่านั้น | ใช้ DetectFormat หากคุณไม่เคยอ่าน Width/Height/BitDepth/FrameCount |
รูปแบบ Unknown สำหรับไฟล์ที่คุณคาดว่าจะได้รับการสนับสนุน | หัวไฟล์ไม่ตรงกับลายเซ็นที่รู้จัก 11 รายการใดเลย, หรือไฟล์เป็นรูปแบบอื่นโดยสิ้นเชิง | ยืนยันไฟล์กับ the รายการรูปแบบที่รองรับ |
FAQ
ฉันสามารถสร้าง subclass ของ ImageInfo หรือ ImageProbe ได้หรือไม่?
ไม่. ImageInfo คือ sealed และ ImageProbe คือ static — ทั้งสองไม่ได้ออกแบบให้สร้าง subclass หรือสร้างอินสแตนซ์ผ่านการสืบทอด.
ImageProbe ปลอดภัยต่อการทำงานหลายเธรดหรือไม่?
ImageProbe ไม่เก็บสถานะที่เปลี่ยนแปลงได้ระหว่างการเรียก — การเรียกแต่ละครั้งไปยัง Probe, ProbeFile หรือ DetectFormat เป็นอิสระกัน ทำให้การเรียกพร้อมกันจากหลายเธรดปลอดภัย.
ฉันต้องทำการกำจัดอะไรหรือไม่?
ไม่. ImageProbe ไม่มีทรัพยากร IDisposable ของตนเอง หากคุณส่ง Stream ที่คุณเปิดด้วยตนเอง คุณยังคงรับผิดชอบในการกำจัดสตรีมนั้น — Probe(stream) จะไม่ปิดมัน.
API Reference สรุป
| คลาส / เมธอด | คำอธิบาย |
|---|---|
ImageProbe.ProbeFile(path) | สำรวจไฟล์โดยใช้เส้นทาง |
ImageProbe.Probe(stream) | สำรวจ Stream |
ImageProbe.Probe(data) | ตรวจสอบ byte[] |
ImageProbe.DetectFormat(stream) | รูปแบบเท่านั้น, จาก Stream |
ImageProbe.DetectFormat(data) | รูปแบบเท่านั้น, จาก byte[] |
ImageInfo(format, width, height, bitDepth, frameCount) | คอนสตรัคเตอร์สาธารณะ — ต้องการเพียง format เท่านั้น |
ImageInfo.Format / .Width / .Height / .BitDepth / .FrameCount | คุณสมบัติผลลัพธ์แบบอ่านอย่างเดียว |
ImageFormat | Enum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom |