git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@273179 13f79535-47bb-0310-9956-ffa450edef68master
@@ -72,6 +72,7 @@ cvstagdiff=org.apache.tools.ant.taskdefs.cvslib.CvsTagDiff | |||
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 | |||
@@ -0,0 +1,241 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.taskdefs.optional.image; | |||
import com.sun.media.jai.codec.FileSeekableStream; | |||
import org.apache.tools.ant.BuildException; | |||
import org.apache.tools.ant.DirectoryScanner; | |||
import org.apache.tools.ant.taskdefs.MatchingTask; | |||
import org.apache.tools.ant.types.optional.image.Draw; | |||
import org.apache.tools.ant.types.optional.image.ImageOperation; | |||
import org.apache.tools.ant.types.optional.image.Rotate; | |||
import org.apache.tools.ant.types.optional.image.Scale; | |||
import org.apache.tools.ant.types.optional.image.TransformOperation; | |||
import javax.media.jai.JAI; | |||
import javax.media.jai.PlanarImage; | |||
import java.io.File; | |||
import java.io.FileOutputStream; | |||
import java.io.IOException; | |||
import java.util.Vector; | |||
/** | |||
* A MatchingTask which relies on <A HREF="http://java.sun.com/products/java-media/jai">JAI (Java Advanced Imaging)</A> | |||
* to perform image manipulation operations on existing images. The | |||
* operations are represented as ImageOperation DataType objects. | |||
* The operations are arranged to conform to the Chaining Model | |||
* of JAI. | |||
* Check out the <A HREF="http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/">JAI Programming Guide</A> | |||
* | |||
* @see org.apache.tools.ant.types.optional.image.ImageOperation | |||
* @see org.apache.tools.ant.types.DataType | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
*/ | |||
public class Image extends MatchingTask { | |||
protected Vector instructions = new Vector(); | |||
protected String str_encoding = "JPEG"; | |||
protected boolean overwrite = false; | |||
protected boolean garbage_collect = false; | |||
protected File srcDir = null; | |||
protected File destDir = null; | |||
/** | |||
* Set the source dir to find the image files. | |||
*/ | |||
public void setSrcdir(File srcDir) { | |||
this.srcDir = srcDir; | |||
} | |||
/** | |||
* Set the image encoding type. <A HREF="http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html#56610">See this table in the JAI Programming Guide</A>. | |||
*/ | |||
public void setEncoding(String encoding) { | |||
str_encoding = encoding; | |||
} | |||
/** | |||
* Sets whether or not to overwrite a file if there is a naming conflict. | |||
*/ | |||
public void setOverwrite(String ovr) { | |||
if (ovr.toLowerCase().equals("true") || ovr.toLowerCase().equals("yes")) { | |||
overwrite = true; | |||
} | |||
} | |||
/** | |||
* Enables Garbage Collection after each image processed. Defaults to false. | |||
*/ | |||
public void setGc(String gc) { | |||
if (gc.toLowerCase().equals("true") || gc.toLowerCase().equals("yes")) { | |||
garbage_collect = true; | |||
} | |||
} | |||
/** | |||
* Sets the destination directory for manipulated images. | |||
* @param destination The destination directory | |||
*/ | |||
public void setDest(String destination) { | |||
destDir = new File(destination); | |||
} | |||
/** | |||
* Adds an ImageOperation to chain. | |||
* @param instr The ImageOperation to append to the chain | |||
*/ | |||
public void addImageOperation(ImageOperation instr) { | |||
instructions.add(instr); | |||
} | |||
/** | |||
* Adds a Rotate ImageOperation to the chain | |||
* @param instr The Rotate operation to add to the chain | |||
* @see org.apache.tools.ant.types.optional.image.Rotate | |||
*/ | |||
public void addRotate(Rotate instr) { | |||
instructions.add(instr); | |||
} | |||
/** | |||
* Adds a Scale ImageOperation to the chain | |||
* @param instr The Scale operation to add to the chain | |||
* @see org.apache.tools.ant.types.optional.image.Scale | |||
*/ | |||
public void addScale(Scale instr) { | |||
instructions.add(instr); | |||
} | |||
/** | |||
* Adds a Draw ImageOperation to the chain. DrawOperation | |||
* DataType objects can be nested inside the Draw object | |||
* @param instr The Draw operation to add to the chain | |||
* @see org.apache.tools.ant.types.optional.image.Draw | |||
* @see org.apache.tools.ant.types.optional.image.DrawOperation | |||
*/ | |||
public void addDraw(Draw instr) { | |||
instructions.add(instr); | |||
} | |||
/** | |||
* Executes all the chained ImageOperations on the file | |||
* specified. | |||
* @param file The file to be processed | |||
*/ | |||
public void processFile(File file) { | |||
try { | |||
log("Processing File: " + file.getAbsolutePath()); | |||
FileSeekableStream input = new FileSeekableStream(file); | |||
PlanarImage image = JAI.create("stream", input); | |||
for (int i = 0; i < instructions.size(); i++) { | |||
Object instr = instructions.elementAt(i); | |||
if (instr instanceof TransformOperation) { | |||
image = ((TransformOperation) instr).executeTransformOperation(image); | |||
} else { | |||
log("Not a TransformOperation: " + instr); | |||
} | |||
} | |||
input.close(); | |||
FileOutputStream stream = new FileOutputStream(file); | |||
log("Encoding As " + str_encoding); | |||
String file_ext = str_encoding.toLowerCase(); | |||
if (str_encoding.toLowerCase().equals("jpg")) { | |||
str_encoding = "JPEG"; | |||
file_ext = "jpg"; | |||
} else if (str_encoding.toLowerCase().equals("tif")) { | |||
str_encoding = "TIFF"; | |||
file_ext = "tif"; | |||
} | |||
JAI.create("encode", image, stream, str_encoding.toUpperCase(), null); | |||
stream.flush(); | |||
stream.close(); | |||
String old_name = file.getAbsolutePath(); | |||
int t_loc = old_name.lastIndexOf("."); | |||
String t_name = old_name.substring(0, t_loc + 1) + file_ext; | |||
File new_file = new File(t_name); | |||
if ((overwrite && new_file.exists()) && (!new_file.equals(file))) { | |||
new_file.delete(); | |||
} | |||
file.renameTo(new_file); | |||
} catch (IOException err) { | |||
log("Error processing file: " + err); | |||
} | |||
} | |||
/** | |||
* Executes the Task | |||
*/ | |||
public void execute() { | |||
try { | |||
DirectoryScanner ds = super.getDirectoryScanner(srcDir); | |||
String[] files = ds.getIncludedFiles(); | |||
for (int i = 0; i < files.length; i++) { | |||
processFile(new File(srcDir.getAbsolutePath() + File.separator + files[i])); | |||
if (garbage_collect) { | |||
System.gc(); | |||
} | |||
} | |||
} catch (Exception err) { | |||
err.printStackTrace(); | |||
throw new BuildException(err.getMessage()); | |||
} | |||
} | |||
} | |||
@@ -0,0 +1,129 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.PlanarImage; | |||
import java.awt.BasicStroke; | |||
import java.awt.Graphics2D; | |||
import java.awt.geom.Arc2D; | |||
import java.awt.image.BufferedImage; | |||
public class Arc extends BasicShape implements DrawOperation { | |||
protected int width = 0; | |||
protected int height = 0; | |||
protected int start = 0; | |||
protected int stop = 0; | |||
protected int type = Arc2D.OPEN; | |||
public void setWidth(int width) { | |||
this.width = width; | |||
} | |||
public void setHeight(int height) { | |||
this.height = height; | |||
} | |||
public void setStart(int start) { | |||
this.start = start; | |||
} | |||
public void setStop(int stop) { | |||
this.stop = stop; | |||
} | |||
/** | |||
* @todo refactor using an EnumeratedAttribute | |||
*/ | |||
public void setType(String str_type) { | |||
if (str_type.toLowerCase().equals("open")) { | |||
type = Arc2D.OPEN; | |||
} else if (str_type.toLowerCase().equals("pie")) { | |||
type = Arc2D.PIE; | |||
} else if (str_type.toLowerCase().equals("chord")) { | |||
type = Arc2D.CHORD; | |||
} | |||
} | |||
public PlanarImage executeDrawOperation() { | |||
BufferedImage bi = new BufferedImage(width + (stroke_width * 2), height + (stroke_width * 2), BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||
Graphics2D graphics = (Graphics2D) bi.getGraphics(); | |||
if (!stroke.equals("transparent")) { | |||
BasicStroke b_stroke = new BasicStroke(stroke_width); | |||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||
graphics.setStroke(b_stroke); | |||
graphics.draw(new Arc2D.Double(stroke_width, stroke_width, width, height, start, stop, type)); | |||
} | |||
if (!fill.equals("transparent")) { | |||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||
graphics.fill(new Arc2D.Double(stroke_width, stroke_width, width, height, start, stop, type)); | |||
} | |||
for (int i = 0; i < instructions.size(); i++) { | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) { | |||
PlanarImage img = ((DrawOperation) instr).executeDrawOperation(); | |||
graphics.drawImage(img.getAsBufferedImage(), null, 0, 0); | |||
} else if (instr instanceof TransformOperation) { | |||
graphics = (Graphics2D) bi.getGraphics(); | |||
PlanarImage image = ((TransformOperation) instr).executeTransformOperation(PlanarImage.wrapRenderedImage(bi)); | |||
bi = image.getAsBufferedImage(); | |||
} | |||
} | |||
return PlanarImage.wrapRenderedImage(bi); | |||
} | |||
} |
@@ -0,0 +1,73 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
public abstract class BasicShape extends ImageOperation implements DrawOperation { | |||
protected int stroke_width = 0; | |||
protected String fill = "transparent"; | |||
protected String stroke = "black"; | |||
public void setFill(String col) { | |||
fill = col; | |||
} | |||
public void setStroke(String col) { | |||
stroke = col; | |||
} | |||
public void setStrokewidth(int width) { | |||
stroke_width = width; | |||
} | |||
} |
@@ -0,0 +1,118 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import java.awt.Color; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public final class ColorMapper { | |||
public static final String COLOR_BLACK = "black"; | |||
public static final String COLOR_BLUE = "blue"; | |||
public static final String COLOR_CYAN = "cyan"; | |||
public static final String COLOR_DARKGRAY = "darkgray"; | |||
public static final String COLOR_GRAY = "gray"; | |||
public static final String COLOR_LIGHTGRAY = "lightgray"; | |||
// Gotta atleast put in the proper spelling :-P | |||
public static final String COLOR_DARKGREY = "darkgrey"; | |||
public static final String COLOR_GREY = "grey"; | |||
public static final String COLOR_LIGHTGREY = "lightgrey"; | |||
public static final String COLOR_GREEN = "green"; | |||
public static final String COLOR_MAGENTA = "magenta"; | |||
public static final String COLOR_ORANGE = "orange"; | |||
public static final String COLOR_PINK = "pink"; | |||
public static final String COLOR_RED = "red"; | |||
public static final String COLOR_WHITE = "white"; | |||
public static final String COLOR_YELLOW = "yellow"; | |||
/** | |||
* @todo refactor to use an EnumeratedAttribute (maybe?) | |||
*/ | |||
public static final Color getColorByName(String color_name) { | |||
color_name = color_name.toLowerCase(); | |||
if (color_name.equals(COLOR_BLACK)) { | |||
return Color.black; | |||
} else if (color_name.equals(COLOR_BLUE)) { | |||
return Color.blue; | |||
} else if (color_name.equals(COLOR_CYAN)) { | |||
return Color.cyan; | |||
} else if (color_name.equals(COLOR_DARKGRAY) || color_name.equals(COLOR_DARKGREY)) { | |||
return Color.darkGray; | |||
} else if (color_name.equals(COLOR_GRAY) || color_name.equals(COLOR_GREY)) { | |||
return Color.gray; | |||
} else if (color_name.equals(COLOR_LIGHTGRAY) || color_name.equals(COLOR_LIGHTGREY)) { | |||
return Color.lightGray; | |||
} else if (color_name.equals(COLOR_GREEN)) { | |||
return Color.green; | |||
} else if (color_name.equals(COLOR_MAGENTA)) { | |||
return Color.magenta; | |||
} else if (color_name.equals(COLOR_ORANGE)) { | |||
return Color.orange; | |||
} else if (color_name.equals(COLOR_PINK)) { | |||
return Color.pink; | |||
} else if (color_name.equals(COLOR_RED)) { | |||
return Color.red; | |||
} else if (color_name.equals(COLOR_WHITE)) { | |||
return Color.white; | |||
} else if (color_name.equals(COLOR_YELLOW)) { | |||
return Color.yellow; | |||
} | |||
return Color.black; | |||
} | |||
} |
@@ -0,0 +1,130 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.RenderedOp; | |||
import javax.media.jai.PlanarImage; | |||
import javax.media.jai.JAI; | |||
import java.awt.*; | |||
import java.awt.image.BufferedImage; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.tasks.optional.image.Image | |||
*/ | |||
public class Draw extends TransformOperation | |||
{ | |||
protected int xloc = 0; | |||
protected int yloc = 0; | |||
public void setXloc(int x) | |||
{ | |||
xloc = x; | |||
} | |||
public void setYloc(int y) | |||
{ | |||
yloc = y; | |||
} | |||
public void addRectangle(Rectangle rect) | |||
{ | |||
instructions.add(rect); | |||
} | |||
public void addText(Text text) | |||
{ | |||
instructions.add(text); | |||
} | |||
public void addEllipse(Ellipse elip) | |||
{ | |||
instructions.add(elip); | |||
} | |||
public void addArc(Arc arc) | |||
{ | |||
instructions.add(arc); | |||
} | |||
public PlanarImage executeTransformOperation(PlanarImage image) | |||
{ | |||
BufferedImage bi = image.getAsBufferedImage(); | |||
Graphics2D graphics = (Graphics2D)bi.getGraphics(); | |||
for (int i=0; i<instructions.size(); i++) | |||
{ | |||
ImageOperation instr = ((ImageOperation)instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) | |||
{ | |||
PlanarImage op = ((DrawOperation)instr).executeDrawOperation(); | |||
log("\tDrawing to x=" + xloc + " y=" + yloc); | |||
graphics.drawImage(op.getAsBufferedImage(),null,xloc,yloc); | |||
} | |||
else if (instr instanceof TransformOperation) | |||
{ | |||
PlanarImage op = ((TransformOperation)instr).executeTransformOperation(null); | |||
BufferedImage child = op.getAsBufferedImage(); | |||
log("\tDrawing to x=" + xloc + " y=" + yloc); | |||
graphics.drawImage(child, null, xloc, yloc); | |||
PlanarImage test = PlanarImage.wrapRenderedImage(bi); | |||
} | |||
} | |||
image = PlanarImage.wrapRenderedImage(bi); | |||
return image; | |||
} | |||
} |
@@ -0,0 +1,75 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.PlanarImage; | |||
/** | |||
* Interface which represents an Operation which is "drawable", such | |||
* as a Rectangle, Circle or Text. The Operation is responsible for | |||
* creating its own image buffer and drawing itself into it, then | |||
* wrapping and returning it as a PlanarImage. This allows multible | |||
* "drawable" objects to be nested. | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public interface DrawOperation { | |||
/** | |||
* Abstract method which is intended to create an image buffer | |||
* and return it so it can be drawn into another object. Use | |||
* an Alpha channel for a "transparent" background. | |||
*/ | |||
public PlanarImage executeDrawOperation(); | |||
} |
@@ -0,0 +1,110 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.PlanarImage; | |||
import java.awt.BasicStroke; | |||
import java.awt.Graphics2D; | |||
import java.awt.geom.Ellipse2D; | |||
import java.awt.image.BufferedImage; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public class Ellipse extends BasicShape implements DrawOperation { | |||
protected int width = 0; | |||
protected int height = 0; | |||
public void setWidth(int width) { | |||
this.width = width; | |||
} | |||
public void setHeight(int height) { | |||
this.height = height; | |||
} | |||
public PlanarImage executeDrawOperation() { | |||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||
Graphics2D graphics = (Graphics2D) bi.getGraphics(); | |||
if (!stroke.equals("transparent")) { | |||
BasicStroke b_stroke = new BasicStroke(stroke_width); | |||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||
graphics.setStroke(b_stroke); | |||
graphics.draw(new Ellipse2D.Double(0, 0, width, height)); | |||
} | |||
if (!fill.equals("transparent")) { | |||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||
graphics.fill(new Ellipse2D.Double(0, 0, width, height)); | |||
} | |||
for (int i = 0; i < instructions.size(); i++) { | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) { | |||
PlanarImage img = ((DrawOperation) instr).executeDrawOperation(); | |||
graphics.drawImage(img.getAsBufferedImage(), null, 0, 0); | |||
} else if (instr instanceof TransformOperation) { | |||
graphics = (Graphics2D) bi.getGraphics(); | |||
PlanarImage image = ((TransformOperation) instr).executeTransformOperation(PlanarImage.wrapRenderedImage(bi)); | |||
bi = image.getAsBufferedImage(); | |||
} | |||
} | |||
return PlanarImage.wrapRenderedImage(bi); | |||
} | |||
} |
@@ -0,0 +1,94 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import org.apache.tools.ant.types.DataType; | |||
import javax.media.jai.RenderedOp; | |||
import javax.media.jai.PlanarImage; | |||
import java.util.Vector; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.tasks.optional.image.Image | |||
*/ | |||
public abstract class ImageOperation extends DataType | |||
{ | |||
protected Vector instructions = new Vector(); | |||
public void addRotate(Rotate instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
public void addDraw(Draw instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
public void addRectangle(Rectangle instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
public void addText(Text instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
public void addScale(Scale instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
} |
@@ -0,0 +1,129 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.PlanarImage; | |||
import java.awt.BasicStroke; | |||
import java.awt.Graphics2D; | |||
import java.awt.image.BufferedImage; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public class Rectangle extends BasicShape implements DrawOperation { | |||
protected int width = 0; | |||
protected int height = 0; | |||
protected int arcwidth = 0; | |||
protected int archeight = 0; | |||
public void setWidth(int w) { | |||
width = w; | |||
} | |||
public void setHeight(int h) { | |||
height = h; | |||
} | |||
public void setArcwidth(int w) { | |||
arcwidth = w; | |||
} | |||
public void setArcheight(int h) { | |||
archeight = h; | |||
} | |||
public PlanarImage executeDrawOperation() { | |||
log("\tCreating Rectangle w=" + width + " h=" + height + " arcw=" + arcwidth + " arch=" + archeight); | |||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||
Graphics2D graphics = (Graphics2D) bi.getGraphics(); | |||
if (!stroke.equals("transparent")) { | |||
BasicStroke b_stroke = new BasicStroke(stroke_width); | |||
graphics.setColor(ColorMapper.getColorByName(stroke)); | |||
graphics.setStroke(b_stroke); | |||
if ((arcwidth != 0) || (archeight != 0)) { | |||
graphics.drawRoundRect(0, 0, width, height, arcwidth, archeight); | |||
} else { | |||
graphics.drawRect(0, 0, width, height); | |||
} | |||
} | |||
if (!fill.equals("transparent")) { | |||
graphics.setColor(ColorMapper.getColorByName(fill)); | |||
if ((arcwidth != 0) || (archeight != 0)) { | |||
graphics.fillRoundRect(stroke_width, stroke_width, width - (stroke_width * 2), height - (stroke_width * 2), arcwidth, archeight); | |||
} else { | |||
graphics.fillRect(stroke_width, stroke_width, width - (stroke_width * 2), height - (stroke_width * 2)); | |||
} | |||
} | |||
for (int i = 0; i < instructions.size(); i++) { | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) { | |||
PlanarImage img = ((DrawOperation) instr).executeDrawOperation(); | |||
graphics.drawImage(img.getAsBufferedImage(), null, 0, 0); | |||
} else if (instr instanceof TransformOperation) { | |||
graphics = (Graphics2D) bi.getGraphics(); | |||
PlanarImage image = ((TransformOperation) instr).executeTransformOperation(PlanarImage.wrapRenderedImage(bi)); | |||
bi = image.getAsBufferedImage(); | |||
} | |||
} | |||
return PlanarImage.wrapRenderedImage(bi); | |||
} | |||
} |
@@ -0,0 +1,157 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import org.apache.tools.ant.types.DataType; | |||
import javax.media.jai.PlanarImage; | |||
import javax.media.jai.InterpolationNearest; | |||
import javax.media.jai.JAI; | |||
import java.awt.image.renderable.ParameterBlock; | |||
import java.awt.image.BufferedImage; | |||
import java.awt.*; | |||
/** | |||
* ImageOperation to rotate an image by a certain degree | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.tasks.optional.image.Image | |||
*/ | |||
public class Rotate extends TransformOperation implements DrawOperation | |||
{ | |||
protected float angle = 0.0F; | |||
/** | |||
* Sets the angle of rotation in degrees. | |||
* @param ang The angle at which to rotate the image | |||
*/ | |||
public void setAngle(String ang) | |||
{ | |||
angle = Float.parseFloat(ang); | |||
} | |||
public PlanarImage performRotate(PlanarImage image) | |||
{ | |||
float t_angle = (float) (angle * (Math.PI / 180.0F)); | |||
ParameterBlock pb = new ParameterBlock(); | |||
pb.addSource(image); | |||
pb.add(0.0F); | |||
pb.add(0.0F); | |||
pb.add(t_angle); | |||
pb.add(new InterpolationNearest()); | |||
return JAI.create("Rotate", pb, null); | |||
} | |||
/** | |||
* Performs the image rotation when being handled as a TransformOperation. | |||
* @param image The image to perform the transformation on. | |||
*/ | |||
public PlanarImage executeTransformOperation(PlanarImage image) | |||
{ | |||
BufferedImage bi = null; | |||
Graphics2D graphics = null; | |||
for (int i = 0; i < instructions.size(); i++) | |||
{ | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) | |||
{ | |||
// If this TransformOperation has DrawOperation children | |||
// then Rotate the first child and return. | |||
System.out.println("Execing Draws"); | |||
PlanarImage op = ((DrawOperation) instr).executeDrawOperation(); | |||
image = performRotate(op); | |||
return image; | |||
} | |||
else if (instr instanceof TransformOperation) | |||
{ | |||
bi = image.getAsBufferedImage(); | |||
graphics = (Graphics2D) bi.getGraphics(); | |||
System.out.println("Execing Transforms"); | |||
image = ((TransformOperation) instr).executeTransformOperation(PlanarImage.wrapRenderedImage(bi)); | |||
bi = image.getAsBufferedImage(); | |||
} | |||
} | |||
System.out.println("Execing as TransformOperation"); | |||
image = performRotate(image); | |||
System.out.println(image); | |||
return image; | |||
} | |||
/** | |||
* Performs the image rotation when being handled as a DrawOperation. | |||
* It absolutely requires that there be a DrawOperation nested beneath it, | |||
* but only the FIRST DrawOperation will be handled since it can only return | |||
* ONE image. | |||
* @param image The image to perform the transformation on. | |||
*/ | |||
public PlanarImage executeDrawOperation() | |||
{ | |||
for (int i = 0; i < instructions.size(); i++) | |||
{ | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) | |||
{ | |||
// If this TransformOperation has DrawOperation children | |||
// then Rotate the first child and return. | |||
PlanarImage op = ((DrawOperation) instr).executeDrawOperation(); | |||
op = performRotate(op); | |||
return op; | |||
} | |||
} | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,162 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.JAI; | |||
import javax.media.jai.PlanarImage; | |||
import java.awt.Graphics2D; | |||
import java.awt.image.BufferedImage; | |||
import java.awt.image.renderable.ParameterBlock; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public class Scale extends TransformOperation implements DrawOperation { | |||
private String width_str = null; | |||
private String height_str = null; | |||
private boolean x_percent = true; | |||
private boolean y_percent = true; | |||
private boolean keep_proportions = false; | |||
public void setKeepproportions(boolean props) { | |||
keep_proportions = props; | |||
} | |||
public void setWidth(String width) { | |||
width_str = width; | |||
} | |||
public void setHeight(String height) { | |||
height_str = height; | |||
} | |||
public float getWidth() { | |||
float width = 0.0F; | |||
int perc_index = width_str.indexOf('%'); | |||
if (perc_index > 0) { | |||
width = Float.parseFloat(width_str.substring(0, perc_index)); | |||
x_percent = true; | |||
return width / 100; | |||
} else { | |||
x_percent = false; | |||
return Float.parseFloat(width_str); | |||
} | |||
} | |||
public float getHeight() { | |||
int perc_index = height_str.indexOf('%'); | |||
if (perc_index > 0) { | |||
float height = Float.parseFloat(height_str.substring(0, perc_index)); | |||
y_percent = true; | |||
return height / 100; | |||
} else { | |||
y_percent = false; | |||
return Float.parseFloat(height_str); | |||
} | |||
} | |||
public PlanarImage performScale(PlanarImage image) { | |||
ParameterBlock pb = new ParameterBlock(); | |||
pb.addSource(image); | |||
float x_fl = getWidth(); | |||
float y_fl = getHeight(); | |||
if (!x_percent) { | |||
x_fl = (x_fl / image.getWidth()); | |||
} | |||
if (!y_percent) { | |||
y_fl = (y_fl / image.getHeight()); | |||
} | |||
if (keep_proportions) { | |||
y_fl = x_fl; | |||
} | |||
pb.add(new Float(x_fl)); | |||
pb.add(new Float(y_fl)); | |||
log("\tScaling to " + x_fl + "% x " + y_fl + "%"); | |||
return JAI.create("scale", pb); | |||
} | |||
public PlanarImage executeTransformOperation(PlanarImage image) { | |||
BufferedImage bi = null; | |||
for (int i = 0; i < instructions.size(); i++) { | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) { | |||
return performScale(image); | |||
} else if (instr instanceof TransformOperation) { | |||
bi = image.getAsBufferedImage(); | |||
image = ((TransformOperation) instr).executeTransformOperation(PlanarImage.wrapRenderedImage(bi)); | |||
bi = image.getAsBufferedImage(); | |||
} | |||
} | |||
return performScale(image); | |||
} | |||
public PlanarImage executeDrawOperation() { | |||
for (int i = 0; i < instructions.size(); i++) { | |||
ImageOperation instr = ((ImageOperation) instructions.elementAt(i)); | |||
if (instr instanceof DrawOperation) { | |||
PlanarImage image = null; | |||
// If this TransformOperation has DrawOperation children | |||
// then Rotate the first child and return. | |||
performScale(image); | |||
return image; | |||
} | |||
} | |||
return null; | |||
} | |||
} |
@@ -0,0 +1,136 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.PlanarImage; | |||
import java.awt.Color; | |||
import java.awt.Font; | |||
import java.awt.FontMetrics; | |||
import java.awt.Graphics2D; | |||
import java.awt.RenderingHints; | |||
import java.awt.image.BufferedImage; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.taskdefs.optional.image.Image | |||
*/ | |||
public class Text extends ImageOperation implements DrawOperation { | |||
private String str_text = ""; | |||
private String font = "Arial"; | |||
private int point = 10; | |||
private boolean bold = false; | |||
private boolean italic = false; | |||
private String color = "black"; | |||
public void setString(String str) { | |||
str_text = str; | |||
} | |||
public void setFont(String f) { | |||
font = f; | |||
} | |||
public void setPoint(String p) { | |||
point = Integer.parseInt(p); | |||
} | |||
public void setColor(String c) { | |||
color = c; | |||
} | |||
/** | |||
* @todo is this used? | |||
*/ | |||
public void setBold(boolean state) { | |||
bold = state; | |||
} | |||
/** | |||
* @todo is this used? | |||
*/ | |||
public void setItalic(boolean state) { | |||
italic = state; | |||
} | |||
public PlanarImage executeDrawOperation() { | |||
log("\tCreating Text \"" + str_text + "\""); | |||
Color couloir = ColorMapper.getColorByName(color); | |||
int width = 1; | |||
int height = 1; | |||
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||
Graphics2D graphics = (Graphics2D) bi.getGraphics(); | |||
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); | |||
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); | |||
Font f = new Font(font, Font.PLAIN, point); | |||
FontMetrics fmetrics = graphics.getFontMetrics(f); | |||
height = fmetrics.getMaxAscent() + fmetrics.getMaxDescent(); | |||
width = fmetrics.stringWidth(str_text); | |||
bi = new BufferedImage(width, height, BufferedImage.TYPE_4BYTE_ABGR_PRE); | |||
graphics = (Graphics2D) bi.getGraphics(); | |||
graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); | |||
graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); | |||
graphics.setFont(f); | |||
graphics.setColor(couloir); | |||
graphics.drawString(str_text, 0, height - fmetrics.getMaxDescent()); | |||
PlanarImage image = PlanarImage.wrapRenderedImage(bi); | |||
return image; | |||
} | |||
} |
@@ -0,0 +1,72 @@ | |||
/* | |||
* The Apache Software License, Version 1.1 | |||
* | |||
* Copyright (c) 2002 The Apache Software Foundation. All rights | |||
* reserved. | |||
* | |||
* Redistribution and use in source and binary forms, with or without | |||
* modification, are permitted provided that the following conditions | |||
* are met: | |||
* | |||
* 1. Redistributions of source code must retain the above copyright | |||
* notice, this list of conditions and the following disclaimer. | |||
* | |||
* 2. Redistributions in binary form must reproduce the above copyright | |||
* notice, this list of conditions and the following disclaimer in | |||
* the documentation and/or other materials provided with the | |||
* distribution. | |||
* | |||
* 3. The end-user documentation included with the redistribution, if | |||
* any, must include the following acknowlegement: | |||
* "This product includes software developed by the | |||
* Apache Software Foundation (http://www.apache.org/)." | |||
* Alternately, this acknowlegement may appear in the software itself, | |||
* if and wherever such third-party acknowlegements normally appear. | |||
* | |||
* 4. The names "The Jakarta Project", "Ant", and "Apache Software | |||
* Foundation" must not be used to endorse or promote products derived | |||
* from this software without prior written permission. For written | |||
* permission, please contact apache@apache.org. | |||
* | |||
* 5. Products derived from this software may not be called "Apache" | |||
* nor may "Apache" appear in their names without prior written | |||
* permission of the Apache Group. | |||
* | |||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED | |||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR | |||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |||
* SUCH DAMAGE. | |||
* ==================================================================== | |||
* | |||
* This software consists of voluntary contributions made by many | |||
* individuals on behalf of the Apache Software Foundation. For more | |||
* information on the Apache Software Foundation, please see | |||
* <http://www.apache.org/>. | |||
*/ | |||
package org.apache.tools.ant.types.optional.image; | |||
import javax.media.jai.RenderedOp; | |||
import javax.media.jai.PlanarImage; | |||
/** | |||
* | |||
* @author <a href="mailto:kzgrey@ntplx.net">Kevin Z Grey</a> | |||
* @see org.apache.tools.ant.tasks.optional.image.Image | |||
*/ | |||
public abstract class TransformOperation extends ImageOperation | |||
{ | |||
public abstract PlanarImage executeTransformOperation(PlanarImage img); | |||
public void addRectangle(Rectangle instr) | |||
{ | |||
instructions.add(instr); | |||
} | |||
} |