Available ang library ng SAIL image decoding

Sa ilalim ng lisensya ng MIT nai-publish cross-platform image decoding library SAIL. Ang SAIL ay isang rebranding ng mga codec mula sa matagal nang hindi sinusuportahang viewer ng imahe na muling isinulat sa C KSquirrel, ngunit may mataas na antas na abstract API at maraming pagpapabuti. Target na madla: mga tumitingin ng larawan, pagbuo ng laro, paglo-load ng mga larawan sa memorya para sa iba pang layunin. Ang library ay nasa ilalim ng pag-unlad, ngunit magagamit na. Ang binary at source code compatibility ay hindi ginagarantiyahan sa yugtong ito ng pag-unlad.

Mga Tampok:

  • Isang simple, compact at mabilis na library na nakasulat sa C na walang mga dependency ng third-party (maliban sa mga codec);
  • Simple, nauunawaan at sa parehong oras malakas na API para sa lahat ng pangangailangan;
  • Mga binding para sa C++;
  • Ang mga format ng larawan ay sinusuportahan ng mga codec na dynamic na na-load;
  • Magbasa (at magsulat) ng mga larawan mula sa isang file, memorya, o maging sa iyong sariling data source;
  • Pagtukoy sa uri ng imahe sa pamamagitan ng extension ng file, o sa pamamagitan ng magic number;
  • Mga kasalukuyang sinusuportahang format: png (read, Windows lang), JPEG (read, write) PNG (read, write).
    Ang trabaho ay isinasagawa upang magdagdag ng mga bagong format. Sinusuportahan ng KSquirrel-libs ang humigit-kumulang 60 mga format sa isang paraan o iba pa, ang pinakasikat na mga format ay nasa unang linya;

  • Maaaring palaging mag-output ng mga pixel ang mga read operation sa RGB at RGBA na format;
  • Ang ilang mga codec ay maaaring mag-output ng mga pixel sa mas malaking listahan ng mga format;
  • Karamihan sa mga codec ay maaari ding mag-output ng SOURCE pixels. Ito ay kapaki-pakinabang, halimbawa, para sa mga gustong makakuha ng buong impormasyon mula sa CMYK o YCCK na mga imahe;
  • Pagbasa at pagsulat ng mga profile ng ICC;
  • Mga halimbawa sa C, Qt, SDL;
  • Mga sinusuportahang platform:
    Windows (installer), macOS (brew) at Linux (Debian).

Ano ang hindi ibinibigay ng SAIL:

  • Pag-edit ng imahe;
  • Mga function ng conversion ng color space maliban sa ibinigay ng mga pinagbabatayan na codec (libjpeg, atbp.);
  • Mga function ng pamamahala ng kulay (paggamit ng mga profile ng ICC, atbp.)

Ang pinakasimpleng halimbawa ng pag-decode sa C:

struct sail_context *context;

SAIL_TRY(sail_init(&context));

struct sail_image *image;
unsigned char *image_pixels;

SAIL_TRY(sail_read(landas,
konteksto,
&larawan,
(walang bisa **)&image_pixels));

/*
* Dito iproseso ang mga natanggap na pixel.
* Upang gawin ito, gamitin ang image->width, image->height, image->bytes_per_line,
* at larawan->pixel_format.
*/

/* Maglinis */
libre(image_pixels);
sail_destroy_image(larawan);

Maikling paglalarawan ng mga antas ng API:

  • Newbie: "Gusto ko lang i-download itong JPEG"
  • Advanced: "Gusto kong i-load ang animated na GIF na ito mula sa memorya"
  • Deep sea diver: "Gusto kong i-load ang animated na GIF na ito mula sa memorya at magkaroon ng ganap na kontrol sa mga codec at pixel output na pipiliin ko."
  • Technical Diver: "Gusto ko lahat ng nasa itaas, at ang sarili kong data source"

Direktang mga kakumpitensya mula sa parehong lugar:

  • Libreng Larawan
  • DevIL
  • SDL_Larawan
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Mga pagkakaiba sa ibang mga aklatan:

  • Human API na may mga inaasahang entity - mga larawan, palette, atbp.
  • Karamihan sa mga codec ay maaaring mag-output ng higit pa sa RGB/RGBA pixels.
  • Karamihan sa mga codec ay maaaring mag-output ng mga orihinal na pixel nang walang conversion sa RGB.
  • Maaari kang magsulat ng mga codec sa anumang wika, at idagdag/alisin din ang mga ito nang hindi muling kino-compile ang buong proyekto.
  • Panatilihin ang impormasyon tungkol sa orihinal na larawan.
  • Ang "Probing" ay ang proseso ng pagkuha ng impormasyon tungkol sa isang imahe nang hindi nagde-decode ng pixel data.
  • Laki at bilis.

Pinagmulan: opennet.ru

Magdagdag ng komento