Доступна Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° дСкодирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ SAIL

Под Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° кросс-платформСнная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° дСкодирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ SAIL. SAIL — это пСрСписанный Π½Π° Π‘ Ρ€Π΅Π±Ρ€Π΅Π½Π΄ΠΈΠ½Π³ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² ΠΈΠ· Π΄Π°Π²Π½ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ просмотра ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ KSquirrel, Π½ΠΎ с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ высокоуровнСго абстрактного API ΠΈ многочислСнными ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌΠΈ. ЦСлСвая аудитория: просмотрщики ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ³Ρ€, Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ для ΠΈΠ½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° находится Π² стадии Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Π° для использования. Бинарная ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ исходного ΠΊΠΎΠ΄Π° Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ гарантируСтся.

ВозмоТности:

  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ, компактная ΠΈ быстрая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, написанная Π½Π° Π‘ Π±Π΅Π· сторонних зависимостСй (ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ²);
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ, понятный ΠΈ Π² Ρ‚ΠΎΠΆΠ΅ врСмя ΠΌΠΎΡ‰Π½Ρ‹ΠΉ API для всСх Π½ΡƒΠΆΠ΄;
  • Π‘ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ ΠΊ C++;
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹ΠΌΠΈ ΠΊΠΎΠ΄Π΅ΠΊΠ°ΠΌΠΈ;
  • Π§Ρ‚Π΅Π½ΠΈΠ΅ (ΠΈ запись) ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, памяти ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ своСго собствСнного источника Π΄Π°Π½Π½Ρ‹Ρ…;
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° изобраТСния ΠΏΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»Π°, ΠΈΠ»ΠΈ ΠΏΠΎ магичСскому числу;
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: APNG (Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° 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,
context,
&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