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คุณสมบัติผลลัพธ์แบบอ่านอย่างเดียว
ImageFormatEnum: Unknown, Png, Jpeg, Gif, Bmp, WebP, Ico, Tiff, Psd, Emf, Wmf, Dicom

ดูเพิ่มเติม

 ภาษาไทย