See: https://sourceforge.net/p/openil/patches/46/

Add the ability to alter the PNG-compression.

--- include/IL/il.h	(revision 1677)
+++ include/IL/il.h	(working copy)
@@ -377,6 +377,7 @@
 #define IL_PNG_ALPHA_INDEX 0x0724 //XIX : ILint : the color in the palette at this index value (0-255) is considered transparent, -1 for no trasparent color
 #define IL_JPG_PROGRESSIVE         0x0725
 #define IL_VTF_COMP                0x0726
+#define IL_PNG_COMPRESSION         0x0727
 
 
 // DXTC definitions
--- src-IL/include/il_states.h	(revision 1677)
+++ src-IL/include/il_states.h	(working copy)
@@ -76,6 +76,7 @@
 	ILboolean	ilJpgProgressive;
 	ILenum		ilDxtcFormat;
 	ILenum		ilPcdPicNum;
+	ILuint		ilPngCompression;
 
 	ILint		ilPngAlphaIndex;	// this index should be treated as an alpha key (most formats use this rather than having alpha in the palette), -1 for none
 									// currently only used when writing out .png files and should obviously be set to -1 most of the time
--- src-IL/src/il_png.c	(revision 1677)
+++ src-IL/src/il_png.c	(working copy)
@@ -538,6 +538,8 @@
 //	png_init_io(png_ptr, PngFile);
 	png_set_write_fn(png_ptr, NULL, png_write, flush_data);
 
+	png_set_compression_level(png_ptr, iGetInt(IL_PNG_COMPRESSION));
+
 	switch (iCurImage->Type)
 	{
 		case IL_BYTE:
--- src-IL/src/il_states.c	(revision 1677)
+++ src-IL/src/il_states.c	(working copy)
@@ -70,6 +70,10 @@
 	ilStates[ilCurrentPos].ilPngAlphaIndex = -1;
 	ilStates[ilCurrentPos].ilVtfCompression = IL_DXT_NO_COMP;
 
+	// Default PNG compression setting as defined in libpng manual:
+	//  http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-5.8
+	ilStates[ilCurrentPos].ilPngCompression = 6;
+
 	ilStates[ilCurrentPos].ilTgaId = NULL;
 	ilStates[ilCurrentPos].ilTgaAuthName = NULL;
 	ilStates[ilCurrentPos].ilTgaAuthComment = NULL;
@@ -500,6 +504,9 @@
 		case IL_VTF_COMP:
 			*Param = ilStates[ilCurrentPos].ilVtfCompression;
 			break;
+		case IL_PNG_COMPRESSION:
+			*Param = ilStates[ilCurrentPos].ilPngCompression;
+			break;
 
 		// Boolean values
 		case IL_CONV_PAL:
@@ -815,6 +822,7 @@
 		ilStates[ilCurrentPos].ilPcdPicNum = ilStates[ilCurrentPos-1].ilPcdPicNum;
 
 		ilStates[ilCurrentPos].ilPngAlphaIndex = ilStates[ilCurrentPos-1].ilPngAlphaIndex;
+		ilStates[ilCurrentPos].ilPngCompression = ilStates[ilCurrentPos-1].ilPngCompression;
 
 		// Strings
 		if (ilStates[ilCurrentPos].ilTgaId)
@@ -1159,6 +1167,14 @@
 				return;
 			}
 			break;
+		case IL_PNG_COMPRESSION:
+			// Valid PNG compression settings as defined in libpng manual:
+			//  http://www.libpng.org/pub/png/libpng-1.2.5-manual.html#section-5.8
+			if (Param >= 0 && Param <= 9) {
+				ilStates[ilCurrentPos].ilPngCompression = Param;
+				return;
+			}
+			break;
 
 		default:
 			ilSetError(IL_INVALID_ENUM);