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_ptr
和 end_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, ...