Даступная бібліятэка дэкадавання малюнкаў SAIL

Пад ліцэнзіяй MIT апублікаваная крос-платформавая бібліятэка дэкадавання малюнкаў SAIL. SAIL - гэта перапісаны на З рэбрэндынг кодэкаў з даўно не падтрымліваемай праграмы прагляду малюнкаў Бялку, Але з наяўнасцю высокаўзроўневага абстрактнага 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
  • DevIL
  • SDL_Image
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Адрозненні ад іншых бібліятэк:

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

Крыніца: opennet.ru

Дадаць каментар