libpng 版本 1.6.21

Libpng 是作為 PNG 規範的伴侶編寫的,旨在減少在應用程式中支援 PNG 檔案格式所需的時間和精力。

Libpng 旨在同時處理多個會話,易於修改,可移植到絕大多數可用的機器(ANSI,K&R,16-,32-和 64 位),並且易於使用。最終目標是以任何可能的方式促進接受 PNG 格式。雖然仍有工作要做(參見 TODO 檔案),但 libpng 應該可以滿足大多數使用者的需求。

使用者限制:

PNG 規範允許影象的寬度和高度大到 2 ^ 31-1(0x7fffffff),或大約 21.47 億行和列。對於安全性,libpng 強制預設限制為 100 萬行和列。通過 png_error() 呼叫,將立即拒絕較大的影象。由於潛在的緩衝區溢位情況,Libpng 可能會拒絕非常寬的影象,但你可以使用以下命令設定自己的限制:

png_set_user_limits(png_ptr, width_max, height_max);

在建立 PNG 結構之後和呼叫 png_read_info()png_read_png()png_process_data() 之前放置此語句。

在編寫 PNG 資料流時,請在呼叫 png_write_info()png_write_png() 之前輸入此語句。

要檢索正在應用的限制,請使用

width_max = png_get_user_width_max(png_ptr);
height_max = png_get_user_height_max(png_ptr);

PNG 規範對 PNG 資料流中允許的輔助塊數量沒有限制。預設情況下,libpng 會限制總共 1000 個 sPLT,tEXt,iTXt,zTXt 和要儲存的未知塊。如果設定了 info_ptrend_info_ptr,則限制分別適用於每個。更改要儲存的此類塊總數的限制:

png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);

0x7fffffffL 意味著無限制。你可以使用以下方法檢索此限制

chunk_cache_max = png_get_chunk_cache_max(png_ptr);

在解壓縮時,Libpng 對 IDAT 以外的壓縮塊可佔用的記憶體量施加了 8 兆位元組(8,000,000 位元組)的限制。你可以使用以下命令更改此限制

png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);

你可以用以下方法檢索限制:

chunk_malloc_max = png_get_chunk_malloc_max(png_ptr);

任何會導致超出這些限制的塊都將被忽略。

檢測 libpng 版本:

png_get_io_ptr() 函式自 libpng-0.88 起存在,從未改變,並且不受條件編譯巨集的影響。它是配置指令碼中用於檢測自 0.88 以來存在任何 libpng 版本的最佳選擇。在 autoconf“configure.in”中你可以使用

AC_CHECK_LIB(png, png_get_io_ptr, ...