import java.awt.image.*;
import java.io.*;
import java.util.*;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
import javax.imageio.ImageIO;
public class Exporter {
// private final List<SegmentationMask> masks;
private final BufferedImage image;
+ private File file;
private RolloverEffect effect;
private String htmlFile = "imagemap.html";
public void export(File folder, List<SegmentationMask> masks) throws IOException, ExportException {
+ // Create a zip file for saving imageMaps
+ file = new File("/home/lingutln/practice/example.zip");
+ ZipOutputStream out = new ZipOutputStream(new FileOutputStream(file));
+
// Create image map
ImageMap map = new ImageMap();
map.setImageHref(imageFile);
List<String> preloads = new ArrayList<String>();
map.addPreload(imageFile);
- for(SegmentationMask mask : masks)
- {
- ContourTracer tracer = new ContourTracer(mask, SegmentationMask.FOREGROUND);
- List<Polygon> trace = tracer.trace();
+
+ try {
+ // Low (fast) compression.. most of data is PNG compressed anyway
+ out.setLevel(0);
+ out.flush();
+ // Create an entry for the image
+ ZipEntry entryImage = new ZipEntry(imageFile);
- if (trace.size() == 0) {
- throw new ExportException("No objects found");
- }
- preloads.clear();
- preloads.add(getPreloads(trace, mask.layerNumber).get(0));
- // Write image
- ImageIO.write(image, "png", new File(folder, imageFile));
+ // Start the entry
+ out.putNextEntry(entryImage);
- if (effect != null) {
- int i = 0;
+ ImageIO.write(image, "png", out);
+
+ for(SegmentationMask mask : masks)
+ {
+ ContourTracer tracer = new ContourTracer(mask, SegmentationMask.FOREGROUND);
+ List<Polygon> trace = tracer.trace();
- // Generate effect images
- for (Polygon object : trace) {
- RenderedImage im = effect.createEffect(image, object);
- // '0' for Rollover effect
- File output = new File(folder, preloads.get(i));
- ImageIO.write(im, "png", output);
+ if (trace.size() == 0) {
+ throw new ExportException("No objects found");
}
- }
-
- // Add javascript preloads
- for (String str : preloads) {
- map.addPreload(str);
- }
-
- // Add areas
- for (Polygon polygon : trace) {
- MapArea area = new MapArea();
- switch (exportShape) {
- case Polygon:
- area.setPolygon(polygon);
- break;
- case Rectangle:
- area.setRect(polygon.getBounds());
- break;
- case Circle:
- // TODO: Implement circle!
+ preloads.clear();
+ preloads.add(getPreloads(trace, mask.layerNumber).get(0));
+ // Write image
+ ImageIO.write(image, "png", new File(folder, imageFile));
+
+ if (effect != null) {
+ int i = 0;
- default:
- area.setPolygon(polygon);
- break;
+ // Generate effect images
+ for (Polygon object : trace) {
+ RenderedImage im = effect.createEffect(image, object);
+ // '0' for Rollover effect
+ File output = new File(folder, preloads.get(i));
+
+ // Low (fast) compression.. most of data is PNG compressed anyway
+ out.setLevel(0);
+
+ // Create an entry for the image
+ ZipEntry entryMaskImage = new ZipEntry(preloads.get(i).toString());
+
+ // Start the entry
+ out.putNextEntry(entryMaskImage);
+ // Writing to the Zip file
+ ImageIO.write(im, "png", out);
+
+ // writing to the folder
+ ImageIO.write(im, "png", output);
+ }
}
- area.setAlt(objectDescription);
- area.setHref(objectLink);
+ // Add javascript preloads
+ for (String str : preloads) {
+ map.addPreload(str);
+ }
- if (effect != null) {
+ // Add areas
+ for (Polygon polygon : trace) {
+ MapArea area = new MapArea();
+ switch (exportShape) {
+ case Polygon:
+ area.setPolygon(polygon);
+ break;
+ case Rectangle:
+ area.setRect(polygon.getBounds());
+ break;
+ case Circle:
+ // TODO: Implement circle!
+
+ default:
+ area.setPolygon(polygon);
+ break;
+ }
+
+ area.setAlt(objectDescription);
+ area.setHref(objectLink);
+ if (effect != null) {
+
+
+ area.addAttr("onmouseover",
+ String.format("rollover(document.%s, image%s)",
+ imageName, mask.layerNumber));
+ area.addAttr("onmouseout",
+ String.format("rollover(document.%s, image0)", imageName));
+ area.addAttr("title",mask.segmentName);
+ }
- area.addAttr("onmouseover",
- String.format("rollover(document.%s, image%s)",
- imageName, mask.layerNumber));
- area.addAttr("onmouseout",
- String.format("rollover(document.%s, image0)", imageName));
- area.addAttr("title",mask.segmentName);
+ map.addArea(area);
}
-
- map.addArea(area);
}
+ // Create an entry for the imageMap
+ ZipEntry entryImageMap = new ZipEntry(htmlFile);
+
+ // Start the entry
+ out.putNextEntry(entryImageMap);
+
+ // Exporting to zip file
+ map.exportToFile(out);
+ // Exporting to Folder
map.exportToFile(new File(folder, htmlFile));
}
+ finally
+ {
+ // Close
+ out.close();
+ }
}
private List<String> getPreloads(List<Polygon> trace, int layerNumber) {