pnggroup/libpng

GitHub: pnggroup/libpng

libpng 是 PNG 图像格式的官方跨平台 C 语言库,提供完整的 PNG 编解码功能与多架构优化。

Stars: 1610 | Forks: 801

# libpng 1.8.0.git 版本的 README 关于版本号的说明,请参阅 `png.h` 顶部的注释。 有关安装 libpng 的说明,请参阅 `INSTALL`。 Libpng 提供了多种发行格式。如果你希望文本 文件使用 UNIX 风格的换行符,请获取 `libpng-*.tar.gz` 或 `libpng-*.tar.xz`;如果你希望使用 DOS 风格的换行符, 请获取 `lpng*.7z` 或 `lpng*.zip`。 有关使用 libpng 的详细说明,请阅读 `libpng-manual.txt`。 有关程序中使用 libpng 的示例,请参阅 `example.c` 和 `pngtest.c`。 有关 libpng 的使用信息和限制(尽管非常少), 请参阅 `png.h`。有关 zlib(libpng 使用的 压缩库)的使用说明和限制,请参阅 `zlib.h`。 运行此库需要使用 zlib 1.0.4 或更高版本,但它 _可能_ 兼容 zlib 0.95 这样旧的版本。即便如此,旧版 zlib 存在一些 bug,可能会为某些图像 输出无效的压缩流。 你还应注意,zlib 是一个压缩库,它的 用途不仅限于 PNG 文件。如果你愿意, 你可以使用 zlib 作为 `fread()` 和 `fwrite()` 的直接 替代品。 zlib 应该可以在 libpng 所在的同一位置获取,或者访问 。 你可能还需要一份 PNG 规范的副本。它以 RFC、W3C 推荐标准和 ISO/IEC 标准的形式提供。你可以在 找到它们。 此代码目前存档于 的下载区域,以及 。 此版本在很大程度上基于 Glenn、Guy 和 Andreas 早期的成果,由我和 PNG 开发小组创建并将提供持续支持。 请将评论、更正和赞扬发送至 `png-mng-implement` (位于 `lists.sourceforge.net`)。(需要订阅;请访问 进行订阅。) 请将有关 PNG 规范的一般问题发送至 `png-mng-misc` (位于 `lists.sourceforge.net`)。(需要订阅;请访问 进行订阅。) ## 历史说明 libpng 库自 1995 年中期以来就得到了广泛的使用和测试。 一年后发布的 0.89 版本是第一个正式发行版。 到 1997 年底,它终于达到了这样一个阶段: API 在一段时间内没有发生重大变化, 而且人们通常会对版本号低于 1.0 的库感到不太放心。1.0.0 版本于 1998 年 3 月发布。 请注意,如果你使用的是共享库,对 `png_info` 结构体的一些更改使得 此版本的库在二进制上与 libpng-0.89 或 更早版本不兼容。`png_set_filler()` 的 `filler` 参数类型 已从 `png_byte` 更改为 `png_uint_32`,这将影响使用此函数的共享库应用程序。 为了避免 `info_struct` 内部更改带来的问题, 0.95 版本中提供了新的 API,以避免应用程序直接 访问 `info_ptr`。这些函数就是 `png_set_` 和 `png_get_` 函数。在 访问/存储 `info_struct` 数据时应使用这些函数,而不是直接对其进行操作,以避免将来出现此类问题。 需要注意的是,直到 libpng-1.2.x 版本之前,这些 API 并没有导致直接访问 info 结构体的现有程序 与新 库不兼容。在 libpng-1.4.x 中(这原本是一个过渡性版本),`png_struct` 和 `info_struct` 的成员仍然可以被访问,但编译器会发出 有关已弃用用法的警告。从 libpng-1.5.0 开始,不再允许直接 访问这些结构体,并且这些结构体的定义位于应用程序无法访问的私有 `pngstruct.h` 和 `pnginfo.h` 头文件中。强烈建议新 程序使用新的 API(如 `example.c` 和 `pngtest.c` 所示), 并且将旧程序转换为新格式,以方便将来 的升级。 自 0.89 版本以来的新增功能包括:能够从 PNG 流中读取数据,即使该流的某些(或全部)签名 字节已被调用 应用程序读取。这也允许读取没有 PNG 文件签名的嵌入式 PNG 流。此外,现在还可以设置 在检测到 chunk CRC 错误时库的操作。现在可以 根据 CRC 错误是发生在 关键 chunk 还是辅助 chunk 中来设置不同的操作。 自 0.90 版本以来的新增功能包括:能够将 libpng 编译为 Windows DLL,以及用于访问 `info_struct` 中数据的新 API。 实验性功能包括:能够为行过滤器选择设置权重和成本 因子,在支持未对齐数据访问的大端处理器上直接从缓冲区读取整数,更快的 alpha 合成方法,以及更精确的 16 位到 8 位颜色 转换。其中一些实验性功能,例如加权 过滤器启发式算法,后来已被移除。 ## 此发行版中包含的文件 ``` ANNOUNCE.md => Announcement of this version, with recent changes AUTHORS.md => List of contributing authors CHANGES => Description of changes between libpng versions LICENSE.md => License to use and redistribute libpng README.md => This file TODO.md => Things not implemented in the current library TRADEMARK.md => Trademark information example.c => Example code for using libpng functions png.c => Basic interface functions common to library png.h => Library function and interface declarations (public) pngpriv.h => Library function and interface declarations (private) pngconf.h => System specific library configuration (public) pngstruct.h => png_struct declaration (private) pnginfo.h => png_info struct declaration (private) pngdebug.h => debugging macros (private) pngerror.c => Error/warning message I/O functions pngget.c => Functions for retrieving info from struct pngmem.c => Memory handling functions pngbar.png => PNG logo, 88x31 pngnow.png => PNG logo, 98x31 pngpread.c => Progressive reading functions pngread.c => Read data/helper high-level functions pngrio.c => Lowest-level data read I/O functions pngrtran.c => Read data transformation functions pngrutil.c => Read data utility functions pngset.c => Functions for storing data into the info_struct pngtest.c => Library test program pngtest.png => Library test sample image pngtrans.c => Common data transformation functions pngwio.c => Lowest-level write I/O functions pngwrite.c => High-level write functions pngwtran.c => Write data transformations pngwutil.c => Write utility functions arm/ => Optimized code for ARM Neon intel/ => Optimized code for INTEL SSE2 loongarch/ => Optimized code for LoongArch LSX mips/ => Optimized code for MIPS MSA and MIPS MMI powerpc/ => Optimized code for PowerPC VSX riscv/ => Optimized code for the RISC-V platform ci/ => Scripts for continuous integration contrib/ => External contributions arm-neon/ => Optimized code for the ARM-NEON platform mips-msa/ => Optimized code for the MIPS-MSA platform powerpc-vsx/ => Optimized code for the POWERPC-VSX platform examples/ => Examples of libpng usage gregbook/ => Source code for PNG reading and writing, from "PNG: The Definitive Guide" by Greg Roelofs, O'Reilly, 1999 libtests/ => Test programs pngexif/ => Program to inspect the EXIF information in PNG files pngminim/ => Minimal decoder, encoder, and progressive decoder programs demonstrating the use of pngusr.dfa pngminus/ => Simple pnm2png and png2pnm programs pngsuite/ => Test images riscv-rvv/ => Optimized code for the RISC-V Vector platform testpngs/ => Test images tools/ => Various tools visupng/ => VisualPng, a Windows viewer for PNG images manuals/ => Manuals libpng-install.txt => Instructions to install libpng libpng-manual.txt => Description of libpng and its functions libpng.3 => Manual page for libpng (includes libpng-manual.txt) png.5 => Manual page for the PNG format projects/ => Project files and workspaces for various IDEs owatcom/ => OpenWatcom project visualc71/ => Microsoft Visual C++ 7.1 workspace vstudio/ => Microsoft Visual Studio workspace scripts/ => Scripts and makefiles for building libpng (see scripts/README.txt for the complete list) tests/ => Test scripts ``` 祝你好运,编程愉快! * Cosmin Truta(现任维护者,自 2018 年起) * Glenn Randers-Pehrson(前任维护者,1998-2018 年) * Andreas Eric Dilger(前任维护者,1996-1997 年) * Guy Eric Schalnat(原作者及前任维护者,1995-1996 年) (曾就职于 Group 42, Inc.)
标签:C/C++, libpng, PNG格式, 事务性I/O, 图像处理, 客户端加密, 底层库