Доступна бібліотека декодування зображень SAIL

Під ліцензією MIT опубліковано Крос-платформна бібліотека декодування зображень SAIL. SAIL - це переписаний на С ребрендинг кодеків з програми перегляду зображень, що давно не підтримуються. KSwirrel, але з наявністю високорівневого абстрактного API та численними покращеннями. Цільова аудиторія: переглядачі зображень, розробка ігор, завантаження зображень на згадку для інших цілей. Бібліотека знаходиться на стадії розробки, але вже придатна для використання. Бінарна сумісність та сумісність вихідного коду на даному етапі розробки не гарантується.

Можливості:

  • Проста, компактна та швидка бібліотека, написана на С без сторонніх залежностей (крім кодеків);
  • Простий, зрозумілий і водночас потужний API для всіх потреб;
  • Біндинги до C++;
  • Формати зображень підтримуються кодеками, що динамічно завантажуються;
  • Читання (і запис) зображень із файлу, пам'яті або навіть власного джерела даних;
  • Визначення типу зображення з розширення файлу, або магічному числу;
  • Форми, що підтримуються на даний момент: png (читання, тільки Windows), JPEG (читання, запис) PNG (читання, запис).
    Робота з додаванням нових форматів ведеться. KSquirrel-libs так чи інакше підтримував близько 60 форматів, найпопулярніші формати стоять у черзі першими;

  • Операції читання можуть видавати пікселі у форматі RGB і RGBA;
  • Деякі кодеки можуть видавати пікселі ще у більшому списку форматів;
  • Більшість кодеків можуть видавати також і вихідні (SOURCE) пікселі. Це стане в нагоді, наприклад, тим, хто захоче отримати повну інформацію з CMYK- або YCCK-зображень;
  • Читання та запис ICC профілів;
  • Приклади C, Qt, SDL;
  • Підтримувані платформи:
    Windows (installer), macOS (brew) та Linux (Debian).

Що SAIL не надає:

  • Редагування зображень;
  • Функції перетворення колірних просторів, крім тих, що дають нижчі кодеки (libjpeg і т.д.);
  • Функції керування кольором (застосування ICC профілів тощо)

Найпростіший приклад декодування на C:

struct sail_context *context;

SAIL_TRY(sail_init(&context));

struct sail_image *image;
unsigned char *image_pixels;

SAIL_TRY(sail_read(path,
контекст,
&image,
(void **) & image_pixels));

/*
* Тут обробіть отримані пікселі.
* Для цього використовуйте image->width, image->height, image->bytes_per_line,
* та image->pixel_format.
*/

/* Очищення */
free(image_pixels);
sail_destroy_image(image);

Короткий опис рівнів API:

  • Новачок: «Я просто хочу завантажити цей JPEG»
  • Просунутий: «Я хочу завантажити цей анімований GIF з пам'яті»
  • Глибоководний дайвер: «Я хочу завантажити цей анімований GIF з пам'яті і мати повний контроль над вибраними кодеками і форматом пікселів, що віддаються»
  • Технічний дайвер: "Я хочу все що вище, і моє власне джерело даних"

Прямі конкуренти з тієї ж області:

  • FreeImage
  • Диявол
  • SDL_Image
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Відмінності від інших бібліотек:

  • Людський API з очікуваними сутностями - зображення, палітри і т.д.
  • Більшість кодеків вміють віддавати не лише RGB/RGBA пікселі.
  • Більшість кодеків вміють віддавати вихідні пікселі без перетворень на RGB.
  • Писати кодеки можна будь-якою мовою, а також додавати/вилучати їх без перекомпіляції всього проекту.
  • Збереження інформації про вихідне зображення.
  • "Промацування" (probing) - отримання інформації про зображення без декодування піксельних даних.
  • Розмір та швидкість.

Джерело: opennet.ru

Додати коментар або відгук