Hi All,<br><br>I&#39;m trying to figure out how to use PIL to crop an existing image, and to preserve all of the characteristics of the input image in the output.  My input image is an 8-bit paletted PNG with alpha. It &quot;looks&quot; like this:  (NOTE that it only has 85 colors, and that alpha value in entries 1 - 43 is &lt; 255)<br>
<br>Metadata:<br>  Software=UMN Mapserver<br>Corner Coordinates:<br>Upper Left  (    0.0,    0.0)<br>Lower Left  (    0.0,  256.0)<br>Upper Right (  256.0,    0.0)<br>Lower Right (  256.0,  256.0)<br>Center      (  128.0,  128.0)<br>
Band 1 Block=256x1 Type=Byte, ColorInterp=Palette<br>  NoData Value=0<br>  Color Table (RGB with 85 entries)<br>    0: 0,0,0,0<br>    1: 251,0,0,64<br>    2: 250,0,0,54<br>    3: 253,0,0,114<br>    4: 254,0,0,176<br>    5: 254,0,0,224<br>
    6: 254,0,0,228<br>    7: 254,0,0,252<br>    8: 253,0,0,168<br>    9: 254,0,0,170<br>   10: 254,0,0,234<br>   11: 254,0,0,246<br>   12: 254,0,0,230<br>   13: 252,0,0,194<br>   14: 253,0,0,232<br>   15: 254,0,0,248<br>   16: 254,0,0,226<br>
   17: 253,0,0,252<br>   18: 254,0,0,244<br>   19: 254,0,0,240<br>   20: 253,0,0,248<br>   21: 254,0,0,192<br>   22: 250,0,0,98<br>   23: 252,0,0,98<br>   24: 253,0,0,236<br>   25: 251,0,0,144<br>   26: 253,0,0,208<br>   27: 252,0,0,252<br>
   28: 253,0,0,250<br>   29: 253,0,0,226<br>   30: 254,0,0,212<br>   31: 253,0,0,242<br>   32: 250,0,0,112<br>   33: 253,0,0,238<br>   34: 253,0,0,222<br>   35: 254,0,0,208<br>   36: 253,0,0,234<br>   37: 254,0,0,236<br>   38: 254,0,0,232<br>
   39: 252,0,0,150<br>   40: 253,0,0,240<br>   41: 251,0,0,114<br>   42: 253,0,0,244<br>   43: 254,0,0,222<br>   44: 231,0,0,255<br>   45: 202,0,0,255<br>   46: 249,0,0,255<br>   47: 96,0,0,255<br>   48: 63,0,0,255<br>   49: 229,0,0,255<br>
   50: 89,0,0,255<br>   51: 248,0,0,255<br>   52: 192,0,0,255<br>   53: 230,0,0,255<br>   54: 88,0,0,255<br>   55: 176,0,0,255<br>   56: 225,0,0,255<br>   57: 206,0,0,255<br>   58: 64,0,0,255<br>   59: 53,0,0,255<br>   60: 113,0,0,255<br>
   61: 169,0,0,255<br>   62: 183,0,0,255<br>   63: 252,0,0,255<br>   64: 184,0,0,255<br>   65: 251,0,0,255<br>   66: 247,0,0,255<br>   67: 189,0,0,255<br>   68: 224,0,0,255<br>   69: 250,0,0,255<br>   70: 244,0,0,255<br>   71: 243,0,0,255<br>
   72: 227,0,0,255<br>   73: 241,0,0,255<br>   74: 253,0,0,255<br>   75: 246,0,0,255<br>   76: 167,0,0,255<br>   77: 168,0,0,255<br>   78: 254,0,0,255<br>   79: 242,0,0,255<br>   80: 245,0,0,255<br>   81: 44,0,0,255<br>   82: 161,0,0,255<br>
   83: 0,0,0,255<br>   84: 255,0,0,255<br><br>I tried a simple experiment with PIL to create a new paletted image that was identical to the input:<br><br>&gt;&gt;&gt; import Image<br>&gt;&gt;&gt; image = Image.open(&#39;quant_on_mapserv.png&#39;)<br>
&gt;&gt;&gt; <a href="http://image.info">image.info</a><br>{&#39;transparency&#39;: 0, &#39;Software&#39;: &#39;UMN Mapserver&#39;}<br>&gt;&gt;&gt; assert image.mode == &#39;P&#39;<br>&gt;&gt;&gt; transparency = <a href="http://image.info">image.info</a>[&#39;transparency&#39;]<br>
&gt;&gt;&gt; image.save(&#39;pil_test.png&#39;, transparency=transparency)<br><br>When I inspected the resulting image, I see that the palette is completely different from what the input had (more entries, and all alpha entries from 1 - 255 set to 255).<br>
<br>Corner Coordinates:<br>Upper Left  (    0.0,    0.0)<br>Lower Left  (    0.0,  256.0)<br>Upper Right (  256.0,    0.0)<br>Lower Right (  256.0,  256.0)<br>Center      (  128.0,  128.0)<br>Band 1 Block=256x1 Type=Byte, ColorInterp=Palette<br>
  NoData Value=0<br>  Color Table (RGB with 256 entries)<br>    0: 0,0,0,0<br>    1: 251,0,0,255<br>    2: 250,0,0,255<br>    3: 253,0,0,255<br>    4: 254,0,0,255<br>    5: 254,0,0,255<br>    6: 254,0,0,255<br>    7: 254,0,0,255<br>
    8: 253,0,0,255<br>    9: 254,0,0,255<br>   10: 254,0,0,255<br>   11: 254,0,0,255<br>   12: 254,0,0,255<br>   13: 252,0,0,255<br>   14: 253,0,0,255<br>   15: 254,0,0,255<br>   16: 254,0,0,255<br>   17: 253,0,0,255<br>   18: 254,0,0,255<br>
   19: 254,0,0,255<br>   20: 253,0,0,255<br>   21: 254,0,0,255<br>   22: 250,0,0,255<br>   23: 252,0,0,255<br>   24: 253,0,0,255<br>   25: 251,0,0,255<br>   26: 253,0,0,255<br>   27: 252,0,0,255<br>   28: 253,0,0,255<br>   29: 253,0,0,255<br>
   30: 254,0,0,255<br>   31: 253,0,0,255<br>   32: 250,0,0,255<br>   33: 253,0,0,255<br>   34: 253,0,0,255<br>   35: 254,0,0,255<br>   36: 253,0,0,255<br>   37: 254,0,0,255<br>   38: 254,0,0,255<br>   39: 252,0,0,255<br>   40: 253,0,0,255<br>
   41: 251,0,0,255<br>   42: 253,0,0,255<br>   43: 254,0,0,255<br>   44: 231,0,0,255<br>   45: 202,0,0,255<br>   46: 249,0,0,255<br>   47: 96,0,0,255<br>   48: 63,0,0,255<br>   49: 229,0,0,255<br>   50: 89,0,0,255<br>   51: 248,0,0,255<br>
   52: 192,0,0,255<br>   53: 230,0,0,255<br>   54: 88,0,0,255<br>   55: 176,0,0,255<br>   56: 225,0,0,255<br>   57: 206,0,0,255<br>   58: 64,0,0,255<br>   59: 53,0,0,255<br>   60: 113,0,0,255<br>   61: 169,0,0,255<br>   62: 183,0,0,255<br>
   63: 252,0,0,255<br>   64: 184,0,0,255<br>   65: 251,0,0,255<br>   66: 247,0,0,255<br>   67: 189,0,0,255<br>   68: 224,0,0,255<br>   69: 250,0,0,255<br>   70: 244,0,0,255<br>   71: 243,0,0,255<br>   72: 227,0,0,255<br>   73: 241,0,0,255<br>
   74: 253,0,0,255<br>   75: 246,0,0,255<br>   76: 167,0,0,255<br>   77: 168,0,0,255<br>   78: 254,0,0,255<br>   79: 242,0,0,255<br>   80: 245,0,0,255<br>   81: 44,0,0,255<br>   82: 161,0,0,255<br>   83: 0,0,0,255<br>   84: 255,0,0,255<br>
   85: 85,85,85,255<br>   86: 86,86,86,255<br>   87: 87,87,87,255<br>   88: 88,88,88,255<br>   89: 89,89,89,255<br>   90: 90,90,90,255<br>   91: 91,91,91,255<br>   92: 92,92,92,255<br>   93: 93,93,93,255<br>   94: 94,94,94,255<br>
   95: 95,95,95,255<br>   96: 96,96,96,255<br>   97: 97,97,97,255<br>   98: 98,98,98,255<br>   99: 99,99,99,255<br>  100: 100,100,100,255<br>  101: 101,101,101,255<br>  102: 102,102,102,255<br>  103: 103,103,103,255<br>  104: 104,104,104,255<br>
  105: 105,105,105,255<br>  106: 106,106,106,255<br>  107: 107,107,107,255<br>  108: 108,108,108,255<br>  109: 109,109,109,255<br>  110: 110,110,110,255<br>  111: 111,111,111,255<br>  112: 112,112,112,255<br>  113: 113,113,113,255<br>
  114: 114,114,114,255<br>  115: 115,115,115,255<br>  116: 116,116,116,255<br>  117: 117,117,117,255<br>  118: 118,118,118,255<br>  119: 119,119,119,255<br>  120: 120,120,120,255<br>  121: 121,121,121,255<br>  122: 122,122,122,255<br>
  123: 123,123,123,255<br>  124: 124,124,124,255<br>  125: 125,125,125,255<br>  126: 126,126,126,255<br>  127: 127,127,127,255<br>  128: 128,128,128,255<br>  129: 129,129,129,255<br>  130: 130,130,130,255<br>  131: 131,131,131,255<br>
  132: 132,132,132,255<br>  133: 133,133,133,255<br>  134: 134,134,134,255<br>  135: 135,135,135,255<br>  136: 136,136,136,255<br>  137: 137,137,137,255<br>  138: 138,138,138,255<br>  139: 139,139,139,255<br>  140: 140,140,140,255<br>
  141: 141,141,141,255<br>  142: 142,142,142,255<br>  143: 143,143,143,255<br>  144: 144,144,144,255<br>  145: 145,145,145,255<br>  146: 146,146,146,255<br>  147: 147,147,147,255<br>  148: 148,148,148,255<br>  149: 149,149,149,255<br>
  150: 150,150,150,255<br>  151: 151,151,151,255<br>  152: 152,152,152,255<br>  153: 153,153,153,255<br>  154: 154,154,154,255<br>  155: 155,155,155,255<br>  156: 156,156,156,255<br>  157: 157,157,157,255<br>  158: 158,158,158,255<br>
  159: 159,159,159,255<br>  160: 160,160,160,255<br>  161: 161,161,161,255<br>  162: 162,162,162,255<br>  163: 163,163,163,255<br>  164: 164,164,164,255<br>  165: 165,165,165,255<br>  166: 166,166,166,255<br>  167: 167,167,167,255<br>
  168: 168,168,168,255<br>  169: 169,169,169,255<br>  170: 170,170,170,255<br>  171: 171,171,171,255<br>  172: 172,172,172,255<br>  173: 173,173,173,255<br>  174: 174,174,174,255<br>  175: 175,175,175,255<br>  176: 176,176,176,255<br>
  177: 177,177,177,255<br>  178: 178,178,178,255<br>  179: 179,179,179,255<br>  180: 180,180,180,255<br>  181: 181,181,181,255<br>  182: 182,182,182,255<br>  183: 183,183,183,255<br>  184: 184,184,184,255<br>  185: 185,185,185,255<br>
  186: 186,186,186,255<br>  187: 187,187,187,255<br>  188: 188,188,188,255<br>  189: 189,189,189,255<br>  190: 190,190,190,255<br>  191: 191,191,191,255<br>  192: 192,192,192,255<br>  193: 193,193,193,255<br>  194: 194,194,194,255<br>
  195: 195,195,195,255<br>  196: 196,196,196,255<br>  197: 197,197,197,255<br>  198: 198,198,198,255<br>  199: 199,199,199,255<br>  200: 200,200,200,255<br>  201: 201,201,201,255<br>  202: 202,202,202,255<br>  203: 203,203,203,255<br>
  204: 204,204,204,255<br>  205: 205,205,205,255<br>  206: 206,206,206,255<br>  207: 207,207,207,255<br>  208: 208,208,208,255<br>  209: 209,209,209,255<br>  210: 210,210,210,255<br>  211: 211,211,211,255<br>  212: 212,212,212,255<br>
  213: 213,213,213,255<br>  214: 214,214,214,255<br>  215: 215,215,215,255<br>  216: 216,216,216,255<br>  217: 217,217,217,255<br>  218: 218,218,218,255<br>  219: 219,219,219,255<br>  220: 220,220,220,255<br>  221: 221,221,221,255<br>
  222: 222,222,222,255<br>  223: 223,223,223,255<br>  224: 224,224,224,255<br>  225: 225,225,225,255<br>  226: 226,226,226,255<br>  227: 227,227,227,255<br>  228: 228,228,228,255<br>  229: 229,229,229,255<br>  230: 230,230,230,255<br>
  231: 231,231,231,255<br>  232: 232,232,232,255<br>  233: 233,233,233,255<br>  234: 234,234,234,255<br>  235: 235,235,235,255<br>  236: 236,236,236,255<br>  237: 237,237,237,255<br>  238: 238,238,238,255<br>  239: 239,239,239,255<br>
  240: 240,240,240,255<br>  241: 241,241,241,255<br>  242: 242,242,242,255<br>  243: 243,243,243,255<br>  244: 244,244,244,255<br>  245: 245,245,245,255<br>  246: 246,246,246,255<br>  247: 247,247,247,255<br>  248: 248,248,248,255<br>
  249: 249,249,249,255<br>  250: 250,250,250,255<br>  251: 251,251,251,255<br>  252: 252,252,252,255<br>  253: 253,253,253,255<br>  254: 254,254,254,255<br>  255: 255,255,255,255<br><br>While the resulting image looks pretty good, the file size is far larger than that of the input image.<br>
<br>$ ll quant_on_mapserv.png pil_test.png<br>-rw-r--r-- 1 randre randre 4540 2010-01-15 11:15 pil_test.png<br>-rw-r--r-- 1 randre randre 1951 2010-01-15 10:50 quant_on_mapserv.png<br><br>I would very much like to keep the size down, and I imagine that in order to do so, I need to be able to match the palette better.  Can someone explain to me A) what the difference is between these 2 palette ptypes, and B) whether it is possible for me to use PIL to create a copy, or cropped version, of the original file that matches its format?<br>
<br>Thanks,<br><br>Roger<br><br>