Perpustakaan penyahkodan imej SAIL tersedia

Di bawah lesen MIT diterbitkan perpustakaan penyahkod imej merentas platform SAIL. SAIL ialah penjenamaan semula codec daripada pemapar imej yang telah lama tidak disokong yang ditulis semula dalam C KSquirrel, tetapi dengan API abstrak peringkat tinggi dan banyak penambahbaikan. Khalayak sasaran: penonton imej, pembangunan permainan, memuatkan imej ke dalam ingatan untuk tujuan lain. Perpustakaan sedang dalam pembangunan, tetapi sudah boleh digunakan. Keserasian binari dan kod sumber tidak dijamin pada peringkat pembangunan ini.

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

  • Pustaka ringkas, padat dan pantas yang ditulis dalam C tanpa kebergantungan pihak ketiga (kecuali codec);
  • API yang ringkas, mudah difahami dan pada masa yang sama berkuasa untuk semua keperluan;
  • Pengikatan untuk C++;
  • Format imej disokong oleh codec yang dimuatkan secara dinamik;
  • Baca (dan tulis) imej daripada fail, memori, atau sumber data anda sendiri;
  • Menentukan jenis imej dengan sambungan fail, atau dengan nombor ajaib;
  • Format yang disokong pada masa ini: png (baca, Windows sahaja), JPEG (baca, tulis) PNG (baca, tulis).
    Kerja sedang dijalankan untuk menambah format baharu. KSquirrel-libs menyokong kira-kira 60 format dalam satu cara atau yang lain, format yang paling popular adalah yang pertama dalam barisan;

  • Operasi baca sentiasa boleh mengeluarkan piksel dalam format RGB dan RGBA;
  • Sesetengah codec boleh mengeluarkan piksel dalam senarai format yang lebih besar;
  • Kebanyakan codec juga boleh mengeluarkan piksel SOURCE. Ini berguna, sebagai contoh, bagi mereka yang ingin mendapatkan maklumat penuh daripada imej CMYK atau YCCK;
  • Membaca dan menulis profil ICC;
  • Contoh dalam C, Qt, SDL;
  • Platform yang disokong:
    Windows (pemasang), macOS (brew) dan Linux (Debian).

Perkara yang tidak disediakan oleh SAIL:

  • Penyuntingan imej;
  • Fungsi penukaran ruang warna selain daripada yang disediakan oleh codec asas (libjpeg, dsb.);
  • Fungsi pengurusan warna (penggunaan profil ICC, dsb.)

Contoh paling mudah penyahkodan dalam C:

struct sail_context *konteks;

SAIL_TRY(sail_init(&konteks));

struct sail_image *imej;
aksara yang tidak ditandatangani *image_pixels;

SAIL_TRY(sail_read(laluan,
konteks,
&gambar,
(kosong **)&image_pixels));

/*
* Di sini memproses piksel yang diterima.
* Untuk melakukan ini, gunakan imej->lebar, imej->tinggi, imej->bait_per_baris,
* dan imej->format_pixel.
*/

/* Bersihkan */
percuma(image_pixels);
belayar_memusnahkan_imej(imej);

Penerangan ringkas tahap API:

  • Newbie: "Saya hanya mahu memuat turun JPEG ini"
  • Lanjutan: "Saya mahu memuatkan GIF animasi ini daripada memori"
  • Penyelam laut dalam: "Saya mahu memuatkan GIF animasi ini daripada memori dan mempunyai kawalan penuh ke atas codec dan output piksel yang saya pilih."
  • Penyelam Teknikal: "Saya mahukan semua perkara di atas dan sumber data saya sendiri"

Pesaing langsung dari kawasan yang sama:

  • Imej Percuma
  • DevIL
  • SDL_Imej
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Perbezaan dari perpustakaan lain:

  • API Manusia dengan entiti yang dijangka - imej, palet, dsb.
  • Kebanyakan codec boleh mengeluarkan lebih daripada sekadar piksel RGB/RGBA.
  • Kebanyakan codec boleh mengeluarkan piksel asal tanpa penukaran kepada RGB.
  • Anda boleh menulis codec dalam mana-mana bahasa, dan juga menambah/mengalih keluarnya tanpa menyusun semula keseluruhan projek.
  • Simpan maklumat tentang imej asal.
  • "Probing" ialah proses mendapatkan maklumat tentang imej tanpa menyahkod data piksel.
  • Saiz dan kelajuan.

Sumber: opennet.ru

Tambah komen