根据麻省理工学院许可
特点:
- 一个用 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