SAIL图像解码库可用

根据麻省理工学院许可 发表 跨平台图像解码库SAIL。 SAIL 是对编解码器的品牌重塑,源自长期不受支持的图像查看器,用 C 重写 松鼠,但具有高级抽象 API 和大量改进。 目标受众:图像查看器、游戏开发、将图像加载到内存中以用于其他目的。 该库正在开发中,但已经可用。 在这个开发阶段,无法保证二进制和源代码的兼容性。

特点:

  • 一个用 C 编写的简单、紧凑和快速的库,无需第三方依赖项(编解码器除外);
  • 简单、易懂且强大的 API 可以满足所有需求;
  • C++ 的绑定;
  • 动态加载的编解码器支持图像格式;
  • 从文件、内存甚至您自己的数据源读取(和写入)图像;
  • 通过文件扩展名确定图像类型,或通过 幻数;
  • 目前支持的格式: 亚太地区 (读取,仅限 Windows)、JPEG(读取、写入) PNG(读取、写入)。
    添加新格式的工作正在进行中。 KSquirrel-libs 以某种方式支持大约 60 种格式,最流行的格式排在第一位;

  • 读操作始终可以输出RGB和RGBA格式的像素;
  • 有些编解码器可以以更大的格式输出像素;
  • 大多数编解码器还可以输出源像素。 例如,对于那些想要从 CMYK 或 YCCK 图像获取完整信息的人来说,这很有用;
  • 读写 ICC 配置文件;
  • C、Qt、SDL 中的示例;
  • 支持的平台:
    Windows(安装程序)、macOS(brew)和 Linux(Debian)。

SAIL 不提供的内容:

  • 图像编辑;
  • 除底层编解码器提供的颜色空间转换函数(libjpeg等)之外的颜色空间转换函数;
  • 色彩管理功能(ICC配置文件的使用等)

最简单的C解码示例:

结构 sail_context *context;

SAIL_TRY(sail_init(&context));

结构 sail_image *图像;
无符号字符*image_pixels;

SAIL_TRY(sail_read(路径,
语境,
&图像,
(void **)&image_pixels));

/*
* 这里处理接收到的像素。
* 为此,请使用 image->width、image->height、image->bytes_per_line、
* 和图像->像素格式。
*/

/* 清理 */
免费(图像像素);
sail_destroy_image(图像);

API级别简要说明:

  • 新手:“我只想下载这个 JPEG”
  • 高级:“我想从内存中加载这个动画 GIF”
  • 深海潜水员:“我想从内存中加载这个动画 GIF,并完全控制我选择的编解码器和像素输出。”
  • 技术潜水员:“我想要上面的一切,还有我自己的数据源”

来自同一领域的直接竞争对手:

  • 自由图像
  • 魔鬼
  • SDL_图像
  • WIC
  • 库2
  • 增强GIL
  • gdk-pixbuf

与其他库的区别:

  • 具有预期实体的人类 API - 图像、调色板等。
  • 大多数编解码器不仅可以输出 RGB/RGBA 像素。
  • 大多数编解码器可以输出原始像素,无需转换为 RGB。
  • 您可以用任何语言编写编解码器,也可以添加/删除它们,而无需重新编译整个项目。
  • 保留有关原始图像的信息。
  • “探测”是在不解码像素数据的情况下获取图像信息的过程。
  • 大小和速度。

来源: opennet.ru

添加评论