Kevin,

This is great stuff, thanks!!!!

I'll be giving it a try in the next week, provide JAI on Mac OS X doesn't give me any troubles.

I just quickly glanced at some of your code and just wanted to add a few bits of trivia:

    public void setKeepproportions(String props)

{
if (props.toLowerCase().equals("yes") || props.toLowerCase().equals("true"))
{
keep_proportions = true;
}
}



Actually, just make this method take a boolean and the "true", "yes", and "on" values will be mapped appropriately.




    public void setWidth(String width)

    {
        width_str = width;
    }

I know this is designed to take a percentage, but you could alternatively make a simple class (doesn't extend anything but Object) with a String constructor that took care of the absolute/percentage stuff and allowed your datatype to use it instead. Have a look at the FlexInteger class in the 1.5 codebase as an example. Your setter could take an instance of a, say, AbsPercentage class rather than a String.

Just thought I'd toss some Ant internals out for your coding pleasure!

By all means keep cranking on this and this will get committed for sure.

        Erik



Kevin Z Grey wrote:

Heya,

Here's what I've got so far for the image manipulation tasks. Before I dish out the high-level description of whats in the zip, I want to note that it does not have support for depend sets only because this past week has been extremely hectic. I have added in "thumbnail" support via a "scale" task, as well as support for all the other image codecs that JAI supports (JPEG, PNG, BMP, PNM, etc). I also added in the Apache license and javadoc descriptions which are incomplete for a couple files (I'll update those ASAP). Here is a description of the architecture:

    * Relevent packages for this are:
      org.apache.tools.ant.taskdefs.optional.image  and
      org.apache.tools.ant.types.optional.image  I chose optional for
      the obvious reasons
    * There is only one "Task" object called Image which extends
      MatchingTask
    * All of the image manipulations are represented as nested elements
      under the Image task and extend from the ImageOperation class
    * The ImageOperation class extends DataType
    * There are two types of ImageOperations:  TransformOperation and
      DrawOperation
    * TransformOperations are any image manipulations that require an
      image buffer to execute  (i.e. Scale needs an image buffer to
      scale and it returns the modified buffer)
    * DrawOperations are image manipulations that only return an image
      buffer (i.e. Ellipse needs only to create an image buffer to draw
      a circle in and return that buffer)

The resulting ANT XML looks like this:

<image includes="*.jpg" srcdir="${image.dir}" overwrite="true">
<scale width="150" height="110%"/> <!-- Scale the Width to precisely 150 Pixels and increase the height by 10% -->
<draw xloc="0" yloc="40">
<text string="ANT for Image Manipulation" font="Arial" point="16" color="white"/>
</draw>
</image>


Current ImageOperations that I have written are:

    * Rotate: Rotates an image by N degrees
    * Scale: Scales an image either to a specific pixel value or percentage
    * Draw: Specifies where to draw an image passed from a DrawOperation
    * Text: Draws formatted text into the image
    * Ellipse: Draws an ellipse/circle
    * Rectangle: Draws a rectangle

TODO:

    * Depends support
    * Change Scale to use attribute "size" rather than "width" and "height"
    * Add Watermark operation
    * Add AutoLevels operation plus a Levels operation which allows more
      control
    * Add ops to add/subtract/multiply/divide by scalars and entire images
    * Maybe a method to convert from image format X to Y
    * Determine whether or not people get really annoyed from me using
      bullet points in my emails

Let me know what you guys think.

oh yeah, to thumbnail do:

<image includes="**.jpg" srcdir="${image.dir}" overwrite="true">
<scale width="64" height="48"/> <!-- Scales to 128x96 pixels... you get the point though ;) -->
</image>


~~K


------------------------------------------------------------------------

Index: C:/development/projects/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
===================================================================
RCS file: /home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
retrieving revision 1.130
diff -c -r1.130 defaults.properties
*** C:/development/projects/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties 9 Jul 2002 21:05:59 -0000 1.130
--- C:/development/projects/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties 13 Jul 2002 23:42:44 -0000
***************
*** 72,77 ****
--- 72,78 ----
tempfile=org.apache.tools.ant.taskdefs.TempFile
# optional tasks
+ image=org.apache.tools.ant.taskdefs.optional.image.Image
script=org.apache.tools.ant.taskdefs.optional.Script
netrexxc=org.apache.tools.ant.taskdefs.optional.NetRexxC
renameext=org.apache.tools.ant.taskdefs.optional.RenameExtensions



------------------------------------------------------------------------

Index: build.xml
===================================================================
RCS file: /home/cvspublic/jakarta-ant/build.xml,v
retrieving revision 1.310
diff -c -r1.310 build.xml
*** build.xml   12 Jul 2002 10:50:01 -0000      1.310
--- build.xml   13 Jul 2002 23:41:48 -0000
***************
*** 299,304 ****
--- 299,308 ----
    <patternset id="needs.jmf">
      <exclude name="${optional.package}/sound/*.java" unless="jmf.present" />
    </patternset>
+   <patternset id="needs.jai">
+     <exclude name="${optional.package}/image/*.java" unless="jai.present"/>
+     <exclude name="${optional.package}/image/types/*.java" 
unless="jai.present"/>
+   </patternset>
    <patternset id="needs.jdepend">
      <exclude name="${optional.package}/jdepend/*" unless="jdepend.present" />
    </patternset>
***************
*** 418,423 ****
--- 422,430 ----
      <available property="jmf.present"
                 classname="javax.sound.sampled.Clip"
                 classpathref="classpath"/>
+     <available property="jai.present"
+                classname="javax.media.jai.JAI"
+                classpathref="classpath"/>
      <condition property="icontract.present">
          <and>
              <isset property="jdk1.2+"/>
***************
*** 615,620 ****
--- 622,628 ----
        <patternset refid="needs.vaj" />
        <patternset refid="needs.servletapi" />
        <patternset refid="needs.jmf" />
+       <patternset refid="needs.jai"/>
        <patternset refid="needs.xalan2" />
        <patternset refid="needs.jdepend" />
        <patternset refid="needs.sun.tools" />


------------------------------------------------------------------------

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>



-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>



Reply via email to