Sdcb.SimdCodecs 1.4؛ اضافه‌شدن decode تصاویر HEIC با C#

چرا مهم است

اگر در برنامه‌ات عکس HEIC می‌خوانی، این نسخه گزینه‌ای کاملاً C# و بدون native dependency پیش رویت می‌گذارد. البته مجوز MIT کد، حق استفاده از patent‌های HEVC را پوشش نمی‌دهد.

قبل از خواندن، این‌ها را بدان۴ مفهوم
benchmark

آزمایشی برای اندازه‌گیری و مقایسهٔ ویژگی‌هایی مانند زمان اجرا یا مصرف حافظه، با ورودی و شرایط مشخص.

بیشتر: benchmark

decode

تبدیل دادهٔ ذخیره‌شده در یک فرمت به شکلی قابل استفاده؛ در تصویر، معمولاً به دادهٔ pixel گفته می‌شود که از فایل استخراج شده است.

در حال نگارش: decode

peak memory

بیشترین مقدار حافظه‌ای که برنامه در طول اجرای یک کار مصرف می‌کند.

در حال نگارش: peak memory

WebAssembly

فرمت اجرایی قابل‌حملی که اجرای برنامه‌های compileشده را در محیط‌هایی مانند مرورگر ممکن می‌کند.

در حال نگارش: WebAssembly

نسخهٔ 1.4 از Sdcb.SimdCodecs،؜ مجموعهٔ image codec نوشته‌شده با C#،؜ پشتیبانی از decode تصاویر HEIF / HEIC را اضافه کرده است. این پروژه native dependency ندارد، با NativeAOT سازگار است و از طریق WebAssembly در مرورگر هم اجرا می‌شود. HEIC فرمت پیش‌فرض عکس در iPhone و بسیاری از گوشی‌های Android است.

قابلیت جدید در package جداگانهٔ Sdcb.SimdCodecs.Heif عرضه می‌شود و package اصلی به آن reference ندارد؛ نصب و register کردن آن باید جداگانه انجام شود. دلیل این جداسازی، patent‌های HEVC است: کد با مجوز MIT منتشر شده، اما این مجوز حق استفاده از patent‌های HEVC را اعطا نمی‌کند و تصمیم دربارهٔ عرضهٔ هر برنامه با این قابلیت، بر عهدهٔ همان پروژه است.

این package از HEVC Main،؜ Main 10 و Main Still Picture،؜ تصاویر tiled grid دوربین گوشی‌ها، clap / irot / imir و ICC / nclx پشتیبانی می‌کند. به‌گفتهٔ سازنده، خروجی Y/Cb/Cr آن در سطح byte با ffmpeg 8.1.2 یکسان است.

در benchmark منتشرشده روی Ryzen 7 5800X و .NET 10،؜ زمان تبدیل عکس HEIC به RGBA با هشت core،؜ بین ۰٫۲۰ تا ۰٫۳۲ برابر زمان libheif 1.23.1 گزارش شده است. سازنده تأکید می‌کند که این مقایسه کاملاً منصفانه نیست، چون SimdCodecs بخش‌های تصویر را موازی decode می‌کند. در مقایسهٔ جداگانهٔ مرحلهٔ HEVC با یک core،؜ زمان اجرا بین ۰٫۶۸ تا ۰٫۸۷ برابر libde265 1.1.1 بوده است. peak memory برای عکس ۱۲٫۶ مگاپیکسلی نیز ۷۵ مگابایت گزارش شده؛ در برابر ۸۰ مگابایت برای libheif و ۲۲۰ مگابایت برای Magick.NET.

این مجموعه برای JPEG،؜ PNG / APNG،؜ WebP،؜ GIF،؜ TIFF و چند فرمت دیگر هم encode و decode دارد؛ JPEG 2000 و JBIG2 فقط decode می‌شوند. بااین‌حال، resizing،؜ drawing یا filtering انجام نمی‌دهد و جایگزین قابلیت‌های پردازش تصویر ImageSharp نیست. سازنده انگیزهٔ پروژه را نیاز به خواندن تصویر بدون native binary و ارائهٔ گزینه‌ای با مجوز MIT،؜ بدون مرحلهٔ دریافت license key در نمونه‌هایش، عنوان می‌کند.

نسخهٔ 2.0 هنوز در دست آماده‌سازی است و به‌جای افزودن فرمت، API را بازطراحی می‌کند؛ از جمله برای خروجی 16-bit،؜ region و scaled decoding و pooled memory.

نکته کلیدی

برای HEIC باید Sdcb.SimdCodecs.Heif را جدا نصب و register کنی و وضعیت patent را برای برنامه‌ات بررسی کنی. عدد سرعت هشت‌core را هم بدون توجه به تفاوت اجرای موازی، مقایسه‌ای کاملاً هم‌شرایط ندان.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)