All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kitfox.svg.app.ant.SVGToImageAntTask Maven / Gradle / Ivy

There is a newer version: 1.1.3
Show newest version
/*
 * SVG Salamander
 * Copyright (c) 2004, Mark McKay
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or 
 * without modification, are permitted provided that the following
 * conditions are met:
 *
 *   - Redistributions of source code must retain the above 
 *     copyright notice, this list of conditions and the following
 *     disclaimer.
 *   - 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.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS 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
 * COPYRIGHT HOLDER OR 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. 
 * 
 * Mark McKay can be contacted at [email protected].  Salamander and other
 * projects can be found at http://www.kitfox.com
 *
 * Created on January 22, 2005, 10:30 AM
 */

package com.kitfox.svg.app.ant;

import java.awt.*;
import java.awt.image.*;
import java.util.*;
import java.util.regex.*;
import java.io.*;
import javax.imageio.*;

//import com.kitfox.util.*;
//import com.kitfox.util.indexedObject.*;

import org.apache.tools.ant.*;
import org.apache.tools.ant.types.*;

import com.kitfox.svg.app.beans.*;
import com.kitfox.svg.*;
import com.kitfox.svg.xml.ColorTable;

/**
 * 

Translates a group of SVG files into images.

* *

Parameters:

*
    *
  • destDir - If present, specifies a directory to write SVG files to. Otherwise * writes images to directory SVG file was found in * verbose - If true, prints processing information to the console
  • *
  • format - File format for output images. The java core javax.imageio.ImageIO * class is used for creating images, so format strings will depend on what * files your system is configured to handle. By default, "gif", "jpg" and "png" * files are guaranteed to be present. If omitted, "png" is used by default.
  • *
  • backgroundColor - Optional background color. Color can be specified as a standard * HTML color. That is, as the name of a standard color such as "blue" or * "limegreen", using the # notation as in #ff00ff for magenta, or in rgb format * listing the components as in rgb(255, 192, 192) for pink. If omitted, * background is transparent.
  • *
  • antiAlias - If set, shapes are drawn using anti-aliasing. Defaults to true.
  • *
  • interpolation - String describing image interpolation algorithm. Can * be one of "nearest neighbor", "bilinear" or "bicubic". Defaults to "bicubic".
  • *
  • width - If greater than 0, determines the width of the written image. Otherwise, * the width is obtained from the SVG document. Defaults to -1;
  • *
  • height - If greater than 0, determines the height of the written image. Otherwise, * the height is obtained from the SVG document. Defaults to -1.
  • *
  • sizeToFit - If true and the width and height of the output image differ * from that of the SVG image, the valid area of the SVG image will be resized * to fit the specified size.
  • *
  • verbose - If true, prints out diagnostic information about processing. * Defaults to false.
  • *
* * Example: * <SVGToImage destDir="${index.java}" format="jpg" verbose="true"> * <fileset dir="${dir1}"> * <include name="*.svg"/> * </fileset> * <fileset dir="${dir2}"> * <include name="*.svg"/> * </fileset> * </SVGToImage> * * * * @author kitfox */ public class SVGToImageAntTask extends Task { private ArrayList filesets = new ArrayList(); boolean verbose = false; File destDir; private String format = "png"; Color backgroundColor = null; int width = -1; int height = -1; boolean antiAlias = true; String interpolation = "bicubic"; boolean clipToViewBox = false; boolean sizeToFit = true; /** Creates a new instance of IndexLoadObjectsAntTask */ public SVGToImageAntTask() { } public String getFormat() { return format; } public void setFormat(String format) { this.format = format; } public void setBackgroundColor(String bgColor) { this.backgroundColor = ColorTable.parseColor(bgColor); } public void setHeight(int height) { this.height = height; } public void setWidth(int width) { this.width = width; } public void setAntiAlias(boolean antiAlias) { this.antiAlias = antiAlias; } public void setInterpolation(String interpolation) { this.interpolation = interpolation; } public void setSizeToFit(boolean sizeToFit) { this.sizeToFit = sizeToFit; } public void setClipToViewBox(boolean clipToViewBox) { this.clipToViewBox = clipToViewBox; } public void setVerbose(boolean verbose) { this.verbose = verbose; } public void setDestDir(File destDir) { this.destDir = destDir; } /** * Adds a set of files. * @param set */ public void addFileset(FileSet set) { filesets.add(set); } @Override public void execute() { if (verbose) log("Building SVG images"); for (FileSet fs : filesets) { FileScanner scanner = fs.getDirectoryScanner(getProject()); String[] files = scanner.getIncludedFiles(); try { File basedir = scanner.getBasedir(); if (verbose) log("Scaning " + basedir); for (int i = 0; i < files.length; i++) { //System.out.println("File " + files[i]); //System.out.println("BaseDir " + basedir); translate(basedir, files[i]); } } catch (Exception e) { throw new BuildException(e); } } } private void translate(File baseDir, String shortName) throws BuildException { File source = new File(baseDir, shortName); if (verbose) log("Reading file: " + source); Matcher matchName = Pattern.compile("(.*)\\.svg", Pattern.CASE_INSENSITIVE).matcher(shortName); if (matchName.matches()) { shortName = matchName.group(1); } shortName += "." + format; SVGIcon icon = new SVGIcon(); icon.setSvgURI(source.toURI()); icon.setAntiAlias(antiAlias); if (interpolation.equals("nearest neighbor")) { icon.setInterpolation(SVGIcon.INTERP_NEAREST_NEIGHBOR); } else if (interpolation.equals("bilinear")) { icon.setInterpolation(SVGIcon.INTERP_BILINEAR); } else if (interpolation.equals("bicubic")) { icon.setInterpolation(SVGIcon.INTERP_BICUBIC); } int iconWidth = width > 0 ? width : icon.getIconWidth(); int iconHeight = height > 0 ? height : icon.getIconHeight(); icon.setClipToViewbox(clipToViewBox); icon.setPreferredSize(new Dimension(iconWidth, iconHeight)); icon.setScaleToFit(sizeToFit); BufferedImage image = new BufferedImage(iconWidth, iconHeight, BufferedImage.TYPE_INT_ARGB); Graphics2D g = image.createGraphics(); if (backgroundColor != null) { g.setColor(backgroundColor); g.fillRect(0, 0, iconWidth, iconHeight); } g.setClip(0, 0, iconWidth, iconHeight); // g.fillRect(10, 10, 100, 100); icon.paintIcon(null, g, 0, 0); g.dispose(); File outFile = destDir == null ? new File(baseDir, shortName) : new File(destDir, shortName); if (verbose) log("Writing file: " + outFile); try { ImageIO.write(image, format, outFile); } catch (IOException e) { log("Error writing image: " + e.getMessage()); throw new BuildException(e); } SVGCache.getSVGUniverse().clear(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy