<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 11 (filtered medium)">
<style>
<!--
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.MsoHeader, li.MsoHeader, div.MsoHeader
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
p.MsoFooter, li.MsoFooter, div.MsoFooter
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline;}
span.EmailStyle19
        {mso-style-type:personal-compose;
        font-family:Arial;
        color:windowtext;}
 /* Page Definitions */
 @page
        {mso-endnote-separator:url("cid:header.htm\@01C86F2D.5A6B44D0") es;
        mso-endnote-continuation-separator:url("cid:header.htm\@01C86F2D.5A6B44D0") ecs;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 66.25pt 1.0in 66.25pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="2050" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=EN-US link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>Hello,<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>I want to do some batch conversions of uncompressed, raw tif
images to optimally compressed PNG images. The documentation in Python Imaging
Library Overview gets me pretty far; I think the conversion is pretty
straightforward:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; import Image<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; infile = r'c:\images\test.txt' # this is a text
file of input tif image file and path names<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; inf = file(infile,'r')<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; for fn in inf:<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;fn = fn.strip() # get
rid of the \n<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;print fn<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;newfn, ft =
fn.rsplit('.')<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span lang=DE style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;newfn = newfn +
&quot;.png&quot;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span lang=DE style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;im = Image.open(fn)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;print fn<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;print im.format,
im.size, im.mode<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;print &quot;New:
&quot;,newfn,&quot;\n&quot;<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;outim =
im.transpose(Image.ROTATE_180)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; &nbsp;&nbsp;&nbsp;&nbsp;outim.save(newfn,&quot;PNG&quot;)
#works, but just gets a PNG encoded image<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&gt;&gt;&gt; inf.close()<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>My question is how to specify the PNG optimize parameter? The
documentation for the save method says<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Im.save(outfile,format,options)<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>The PNG section of the documentation says &#8220;optimize&#8221;
can be specified for the save method. It appears that this is the value of a
keyword argument. However, if I try im.save(outfile,format,&#8221;optimize&#8221;),
the code fails with a wrong number of arguments message.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>In the save method in Image.py, the keyword parameters
passed get put into self.encoderinfo which is interrogated in the _save method
in PngImagePlugin.py. So &#8220;optimize&#8221; is a key in a dictionary data
structure, but a key to what and I&#8217;m lost at that point.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>Thanks.<o:p></o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'><o:p>&nbsp;</o:p></span></font></p>

<p class=MsoNormal><font size=3 face=Arial><span style='font-size:12.0pt;
font-family:Arial'>Brandon Nuttall<o:p></o:p></span></font></p>

</div>

</body>

</html>