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, 图像处理, 客户端加密, 底层库