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)
<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
- 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
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
<<attachment: image.zip>>
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]>
