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]>
