Giới thiệu

Aspose.Imaging FOSS cho .NET là một thư viện miễn phí, có giấy phép MIT, mã nguồn mở dành cho các nhà phát triển .NET cần biết thông tin về một tệp ảnh is — định dạng, kích thước, độ sâu bit và số khung hình — mà không phải trả phí để giải mã nó. Phần tĩnh ImageProbe class là điểm vào: ProbeFile(path) đọc từ đĩa, Probe(stream) and Probe(data) chấp nhận một stream hoặc mảng byte, và DetectFormat(stream) / DetectFormat(data) trả về ImageFormat giá trị enum mà không cần xây dựng một ImageInfo, cho những người gọi chỉ cần phân nhánh dựa trên định dạng. Mỗi phương thức probe trả về một ImageInfo đối tượng có thể null Width, Height, BitDepth, và FrameCount các thuộc tính, chỉ được điền khi tiêu đề của định dạng được phát hiện thực sự chứa giá trị đó.

Đây là một công cụ có mục tiêu hẹp cố ý, và đó chính là ý định. Nó không giải mã pixel, không hiển thị hình ảnh, cũng không chuyển đổi giữa các định dạng — đối với những nhu cầu đó, sản phẩm thương mại Aspose.Imaging cho .NET là lựa chọn phù hợp (được liên kết bên dưới trong mục Mã nguồn mở & Giấy phép). Những gì Aspose.Imaging FOSS cho .NET thực hiện là công việc nhỏ hơn, phổ biến hơn rất nhiều: trả lời câu hỏi “định dạng này là gì, và kích thước bao nhiêu?” một cách nhanh chóng và an toàn nhất có thể, cho các loại vấn đề mà việc giải mã toàn bộ sẽ là công việc lãng phí: xác thực tải lên, tính kích thước bố cục thumbnail, phân loại một loạt tệp hỗn hợp, hoặc đọc các trường tiêu đề DICOM để kiểm tra tiền xử lý.

Thư viện có giấy phép MIT, không có bất kỳ phụ thuộc bên ngoài nào và hỗ trợ cả netstandard2.0 và net8.0 — miễn phí cho cả sử dụng mã nguồn mở và thương mại, không có royalty hoặc hạn chế phân phối lại.


Các tính năng chính

Ba cách để kiểm tra một tệp

ImageProbe cung cấp các điểm vào dạng đường dẫn tệp, luồng và mảng byte, vì vậy nó phù hợp ở bất kỳ nơi nào dữ liệu hình ảnh đã tồn tại trong quy trình của bạn — trên đĩa, đã có trong bộ nhớ, hoặc đang truyền qua mạng. DetectFormat bỏ qua việc xây dựng một ImageInfo đầy đủ khi bạn chỉ cần phân nhánh dựa trên định dạng.

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

Kết quả có cấu trúc, trung thực

ImageInfo hiển thị Format (một giá trị enum ImageFormat, luôn được đặt một khi tiêu đề được nhận dạng) cùng với các trường nullable Width, Height, BitDepth và FrameCount. “Nullable” thực sự thực hiện công việc ở đây: việc điền dữ liệu trường thay đổi một cách thực tế tùy theo định dạng, và ImageInfo không bao giờ tự tạo ra giá trị mà tiêu đề của định dạng không chứa. Kiểm tra null trước khi sử dụng là mẫu đúng, không phải là suy nghĩ phòng ngừa sau này.

var info = ImageProbe.ProbeFile("scan.dcm");
if (info.Width.HasValue && info.Height.HasValue)
{
    Console.WriteLine($"{info.Format}: {info.Width}x{info.Height}");
}

11 Định dạng, Bao gồm Ba Định dạng Không Có Gì Khác trong Không gian Phát hiện .NET của FOSS

PNG, JPEG, GIF, BMP, WebP (nén mất dữ liệu, không mất dữ liệu và mở rộng), ICO, TIFF, PSD, EMF, WMF và DICOM. Việc điền trường khác nhau theo định dạng có mục đích, không phải do bỏ sót — PNG chứa chiều rộng, chiều cao, độ sâu bit, and số khung (mặc dù FrameCount là một giá trị được mã hoá cứng 1, không phải là phát hiện khung animated-PNG thực tế); JPEG và BMP chứa kích thước và độ sâu bit nhưng không bao giờ có số khung; WebP chỉ chứa kích thước; ICO’s FrameCount là một đếm thực tế của các kích thước biểu tượng nhúng trong thư mục của nó, và một 0 byte trong trường kích thước của mục nhập thư mục ICO có nghĩa là 256px, theo đặc tả định dạng; TIFF’s FrameCount phản ánh một quá trình duyệt có giới hạn của chuỗi IFD của tệp, một IFD cho mỗi trang.

Ba trong số mười một này — PSD, EMF/WMF, và DICOM — không có bộ phát hiện .NET miễn phí, mã nguồn mở nào khác mà chúng tôi biết, điều này là một phần thực sự lý do tại sao thư viện này tồn tại.

WMF và EMF: Hai Định dạng Di sản, Hai Giới hạn Khác Nhau

WMF không thể đặt vị trí vẫn được xác định đúng là ImageFormat.Wmf, nhưng chỉ WMF có thể đặt vị trí mới điền được kích thước — được suy ra từ giới hạn đơn vị-per-inch trong tiêu đề thông qua một phép chuyển đổi 96 DPI được mã cứng, vì WMF tự nó không chứa kích thước pixel tuyệt đối. EMF không có trường chiều rộng/chiều cao rõ ràng nào; kích thước của nó đến từ hình chữ nhật không gian thiết bị rclBounds trong tiêu đề EMF. Cả hai đều được phản ánh trung thực trong ImageInfo: khi một giá trị không thể suy ra, thuộc tính sẽ giữ null thay vì đoán.

Phân tích Tiêu đề DICOM mà Không Cần Trình Xem

ImageProbe đọc các tiêu đề DICOM trên các cú pháp chuyển đổi Implicit VR Little Endian và Explicit VR Little/Big Endian, trích xuất Rows vào Height, Columns vào Width, và BitsAllocated vào BitDepth — không cần trình xem DICOM hoặc phụ thuộc hình ảnh bên ngoài. Việc phân tích được thiết kế bảo thủ: một phần tử chuỗi có độ dài không xác định sẽ dừng lại thay vì đoán nội dung, do đó một file DICOM chỉ được hiểu một phần sẽ chuyển thành ImageInfo một phần thay vì một kết quả sai.

Không bao giờ ném ngoại lệ khi đầu vào bị sai định dạng hoặc bị cắt ngắn

Probe được xây dựng cho các tệp không tin cậy, chỉ một phần, hoặc đang truyền. Nếu một tệp khớp với chữ ký của định dạng nhưng tiêu đề của nó không thể được phân tích đầy đủ — tải xuống bị cắt ngắn, tải lên bị hỏng — kết quả chỉ chứa Format đã phát hiện thay vì một ngoại lệ.

byte[] truncated = fullFileBytes[..^3];
var info = ImageProbe.Probe(truncated);
// info.Format is still populated; other fields may be null

Bắt đầu nhanh

Cài đặt gói, sau đó kiểm tra một tệp trên đĩa để đọc định dạng đã phát hiện, kích thước, độ sâu bit và số khung trong một lần gọi, tiếp theo là kiểm tra chỉ định dạng bằng cách sử dụng byte thô:

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);

Các định dạng được hỗ trợ

Aspose.Imaging FOSS cho .NET detects tất cả 11 định dạng dưới đây và đọc siêu dữ liệu ở mức tiêu đề — nó không giải mã dữ liệu pixel, vì vậy không có khả năng “write” để báo cáo. Việc điền trường thay đổi tùy theo định dạng; xem chi tiết phân tích trong Các tính năng chính ở trên.

Định dạngPhần mở rộngDetectedChiều rộng / Chiều caoĐộ sâu bitSố khung
PNG.png✓✓✓✓
JPEG.jpg / .jpeg✓✓✓—
GIF.gif✓✓—✓
BMP.bmp✓✓✓—
WebP.webp✓✓——
ICO.ico✓✓✓✓
TIFF.tif / .tiff✓✓✓✓
PSD.psd✓✓✓—
EMF.emf✓✓ (từ giới hạn)——
WMF.wmf✓✓ (chỉ có thể đặt, 96 DPI)——
DICOM.dcm✓✓ (Hàng/Cột)✓ (BitsAllocated)—

Mã nguồn mở & Giấy phép

Aspose.Imaging FOSS cho .NET được cấp phép MIT mà không có phụ thuộc bên ngoài. Giấy phép MIT cho phép sử dụng trong cả dự án mã nguồn mở và thương mại mà không có phí bản quyền hay hạn chế nào về việc phân phối lại. Mã nguồn có sẵn trên GitHub. Nó được giới hạn cố ý chỉ để phát hiện định dạng — để giải mã, chỉnh sửa hoặc chuyển đổi các định dạng ảnh này, xem Aspose.Imaging cho .NET — Sản phẩm Doanh nghiệp.


Bắt đầu

Tài nguyên liên quan