SAIL görüntü kod çözme kütüphanesi mevcut

MIT lisansı altında yayınlanan platformlar arası görüntü kod çözme kütüphanesi SAIL. SAIL, uzun süredir desteklenmeyen bir resim görüntüleyicinin C dilinde yeniden yazılmış codec bileşenlerinin yeniden markalanmasıdır. sincap, ancak üst düzey soyut bir API ve çok sayıda iyileştirmeyle. Hedef kitle: resim görüntüleyenler, oyun geliştirme, resimlerin başka amaçlarla belleğe yüklenmesi. Kütüphane geliştirilme aşamasındadır ancak halihazırda kullanılabilir durumdadır. Geliştirmenin bu aşamasında ikili kod ve kaynak kodu uyumluluğu garanti edilmez.

Özellikler:

  • Üçüncü taraf bağımlılıkları olmadan (codec'ler hariç) C ile yazılmış basit, kompakt ve hızlı bir kitaplık;
  • Tüm ihtiyaçlara yönelik basit, anlaşılır ve aynı zamanda güçlü API;
  • C++ için bağlamalar;
  • Görüntü formatları dinamik olarak yüklenen kodlayıcılar tarafından desteklenir;
  • Bir dosyadan, bellekten ve hatta kendi veri kaynağınızdan görüntüleri okuyun (ve yazın);
  • Görüntü tipini dosya uzantısına göre veya sihirli sayı;
  • Şu anda desteklenen formatlar: APNG (okuma, yalnızca Windows), JPEG (okuma, yazma) PNG (okuma, yazma).
    Yeni formatların eklenmesi için çalışmalar devam etmektedir. KSquirrel-lib'ler şu veya bu şekilde yaklaşık 60 formatı destekledi; en popüler formatlar ilk sırada yer alıyor;

  • Okuma işlemleri, piksellerin her zaman RGB ve RGBA formatında çıktısını alabilir;
  • Bazı codec bileşenleri, pikselleri daha da geniş bir format listesinde yayınlayabilir;
  • Çoğu codec bileşeni aynı zamanda SOURCE piksellerinin çıktısını da verebilir. Bu, örneğin CMYK veya YCCK görsellerinden tam bilgi almak isteyenler için kullanışlıdır;
  • ICC profillerini okuma ve yazma;
  • C, Qt, SDL'deki örnekler;
  • Desteklenen platformlar:
    Windows (yükleyici), macOS (brew) ve Linux (Debian).

SAIL'in sağlamadığı şeyler:

  • Resim düzenleme;
  • Temel codec bileşenleri (libjpeg vb.) tarafından sağlananlar dışındaki renk alanı dönüştürme işlevleri;
  • Renk yönetimi işlevleri (ICC profillerinin kullanımı vb.)

C'de kod çözmenin en basit örneği:

struct sail_context *context;

SAIL_TRY(sail_init(&context));

struct sail_image *image;
unsigned char *image_pixels;

SAIL_TRY(sail_read(yol,
bağlam,
&resim,
(void **)&image_pixels));

/*
* Burada alınan pikselleri işleyin.
* Bunu yapmak için image->width, image->height, image->bytes_per_line'ı kullanın,
* ve resim->pixel_format.
*/

/* Temizlemek */
ücretsiz(image_pixels);
sail_destroy_image(resim);

API seviyelerinin kısa açıklaması:

  • Çaylak: "Sadece bu JPEG'i indirmek istiyorum"
  • Gelişmiş: "Bu animasyonlu GIF'i bellekten yüklemek istiyorum"
  • Derin deniz dalgıcı: "Bu animasyonlu GIF'i bellekten yüklemek ve seçtiğim codec'ler ve piksel çıktısı üzerinde tam kontrole sahip olmak istiyorum."
  • Teknik Dalgıç: “Yukarıdaki her şeyi ve kendi veri kaynağımı istiyorum”

Aynı bölgeden doğrudan rakipler:

  • FreeImage
  • Şeytan
  • SDL_Resmi
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Diğer kütüphanelerden farkları:

  • Beklenen varlıklara (resimler, paletler vb.) sahip İnsan API'si.
  • Çoğu codec bileşeni yalnızca RGB/RGBA piksellerinden daha fazlasını üretebilir.
  • Çoğu codec bileşeni, RGB'ye dönüştürmeden orijinal piksellerin çıktısını alabilir.
  • Codec'leri herhangi bir dilde yazabilir ve ayrıca tüm projeyi yeniden derlemeden bunları ekleyebilir/kaldırabilirsiniz.
  • Orijinal görüntü hakkındaki bilgileri koruyun.
  • “Sondalama”, piksel verilerinin kodunu çözmeden bir görüntü hakkında bilgi edinme işlemidir.
  • Boyut ve hız.

Kaynak: opennet.ru

Yorum ekle