]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
Remember the original URI in the FopImage instance.
authorJeremias Maerki <jeremias@apache.org>
Mon, 22 Aug 2005 14:48:42 +0000 (14:48 +0000)
committerJeremias Maerki <jeremias@apache.org>
Mon, 22 Aug 2005 14:48:42 +0000 (14:48 +0000)
Output the original URI in the comment when writing an image to PostScript. Useful for people who post-process their PostScript files.
Fixed the position of the image comment so it can be used to factor out duplicate images when combining multiple PostScript files.

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@234500 13f79535-47bb-0310-9956-ffa450edef68

12 files changed:
src/java/org/apache/fop/image/AbstractFopImage.java
src/java/org/apache/fop/image/FopImage.java
src/java/org/apache/fop/image/analyser/BMPReader.java
src/java/org/apache/fop/image/analyser/EPSReader.java
src/java/org/apache/fop/image/analyser/GIFReader.java
src/java/org/apache/fop/image/analyser/JPEGReader.java
src/java/org/apache/fop/image/analyser/PNGReader.java
src/java/org/apache/fop/image/analyser/SVGReader.java
src/java/org/apache/fop/image/analyser/TIFFReader.java
src/java/org/apache/fop/image/analyser/XMLReader.java
src/java/org/apache/fop/render/ps/PSGraphics2D.java
src/java/org/apache/fop/render/ps/PSImageUtils.java

index e97a0ec68f18d49e270171b28a64626a0c93f6f7..2a9136f8084caadf860a8d66c51ad7eb5a236cae 100644 (file)
@@ -24,7 +24,6 @@ import java.awt.color.ICC_Profile;
 import java.io.InputStream;
 import java.awt.Color;
 
-// FOP
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -133,11 +132,15 @@ public abstract class AbstractFopImage implements FopImage {
         return imageInfo.mimeType;
     }
 
+    /** @see org.apache.fop.image.FopImage#getOriginalURI() */
+    public String getOriginalURI() {
+        return this.imageInfo.originalURI;
+    }
+    
     /**
      * Load image data and initialize its properties.
      *
      * @param type the type of loading to do
-     * @param ua the user agent for handling logging etc.
      * @return true if the loading was successful
      */
     public synchronized boolean load(int type) {
@@ -173,7 +176,6 @@ public abstract class AbstractFopImage implements FopImage {
      * All implementations should override this to get and
      * return the dimensions.
      *
-     * @param ua the user agent
      * @return true if the loading was successful
      */
     protected boolean loadDimensions() {
@@ -185,7 +187,6 @@ public abstract class AbstractFopImage implements FopImage {
      * If the renderer requires a bitmap image then the
      * implementations should override this to load the bitmap.
      *
-     * @param ua the user agent
      * @return true if the loading was successful
      */
     protected boolean loadBitmap() {
@@ -197,7 +198,6 @@ public abstract class AbstractFopImage implements FopImage {
      * In some cases the original data can be used by the renderer.
      * This should load the data and any other associated information.
      *
-     * @param ua the user agent
      * @return true if the loading was successful
      */
     protected boolean loadOriginalData() {
index 153947cc9c14f87b7cf98ffc18893440597c83f1..510a66f0586bca6c26fb75c3416fcced7ee15028 100644 (file)
@@ -32,17 +32,17 @@ public interface FopImage {
     /**
      * Flag for loading dimensions.
      */
-    public static final int DIMENSIONS = 1;
+    int DIMENSIONS = 1;
 
     /**
      * Flag for loading original data.
      */
-    public static final int ORIGINAL_DATA = 2;
+    int ORIGINAL_DATA = 2;
 
     /**
      * Flag for loading bitmap data.
      */
-    public static final int BITMAP = 4;
+    int BITMAP = 4;
 
     /**
      * Get the mime type of this image.
@@ -53,6 +53,9 @@ public interface FopImage {
      */
     String getMimeType();
 
+    /** @return the original URI used to access this image. */
+    String getOriginalURI();
+    
     /**
      * Load particular inforamtion for this image
      * This must be called before attempting to get
@@ -170,6 +173,8 @@ public interface FopImage {
     public static class ImageInfo {
         /** InputStream to load the image from */
         public InputStream inputStream;
+        /** Original URI the image was accessed with */
+        public String originalURI;
         /** image width (in pixels) */
         public int width;
         /** image height (in pixels) */
index 077d4f2294c56038620b40d63e608f817990e962..12be15dab974a76ca31d045dc4f01ab94284d62e 100644 (file)
@@ -30,7 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
  * ImageReader object for BMP image type.
  *
  * @author    Pankaj Narula
- * @version   $Id: BMPReader.java,v 1.8 2003/03/06 21:25:45 jeremias Exp $
+ * @version   $Id$
  */
 public class BMPReader implements ImageReader {
 
@@ -54,6 +54,8 @@ public class BMPReader implements ImageReader {
                 && (header[1] == (byte) 0x4d));
         if (supported) {
             FopImage.ImageInfo info = getDimension(header);
+            info.originalURI = uri;
+            info.mimeType = getMimeType();
             info.inputStream = bis;
             return info;
         } else {
@@ -72,7 +74,6 @@ public class BMPReader implements ImageReader {
 
     private FopImage.ImageInfo getDimension(byte[] header) {
         FopImage.ImageInfo info = new FopImage.ImageInfo();
-        info.mimeType = getMimeType();
 
         // little endian notation
         int byte1 = header[WIDTH_OFFSET] & 0xff;
index 1d34d702b4c90900b196986aefe4797000505cac..8217b6dbd0200bf2f0d9804af762f7108bceb336 100644 (file)
@@ -32,7 +32,7 @@ import org.apache.fop.apps.FOUserAgent;
 /**
  * ImageReader object for EPS document image type.
  *
- * @version   $Id: EPSReader.java,v 1.9 2003/03/06 21:25:45 jeremias Exp $
+ * @version   $Id$
  */
 public class EPSReader implements ImageReader {
 
@@ -80,6 +80,7 @@ public class EPSReader implements ImageReader {
 
         if (isEPS) {
             FopImage.ImageInfo info = new FopImage.ImageInfo();
+            info.originalURI = uri;
             info.mimeType = getMimeType();
             info.data = data;
             readEPSImage(bis, data);
index 8a23ddcc3bcbc8034701957b10c8d88f3790ae39..ed32d9462a891b1a578cfc775b7544a567e893fc 100644 (file)
@@ -30,7 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
  * ImageReader object for GIF image type.
  *
  * @author    Pankaj Narula
- * @version   $Id: GIFReader.java,v 1.8 2003/03/06 21:25:45 jeremias Exp $
+ * @version   $Id$
  */
 public class GIFReader implements ImageReader {
 
@@ -48,6 +48,7 @@ public class GIFReader implements ImageReader {
                 && (header[5] == 'a'));
         if (supported) {
             FopImage.ImageInfo info = getDimension(header);
+            info.originalURI = uri;
             info.mimeType = getMimeType();
             info.inputStream = bis;
             return info;
index 71f6f7da1d3bde39b98b80d5d70114f799e65275..b4fde1e111d5d54295f0eeb245b0528539987923 100644 (file)
@@ -30,7 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
  * ImageReader object for JPEG image type.
  *
  * @author Pankaj Narula
- * @version $Id: JPEGReader.java,v 1.8 2003/03/06 21:25:45 jeremias Exp $
+ * @version $Id$
  */
 public class JPEGReader implements ImageReader {
 
@@ -61,6 +61,7 @@ public class JPEGReader implements ImageReader {
                     && (header[1] == (byte) 0xd8));
         if (supported) {
             FopImage.ImageInfo info = getDimension(fis);
+            info.originalURI = uri;
             info.mimeType = getMimeType();
             info.inputStream = fis;
             return info;
index c833187a2f886b56009fd21fbd1b2511af5cd669..08dd9fa19a57e7e7fc3544797c148f081787b80b 100644 (file)
@@ -30,7 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
  * ImageReader object for PNG image type.
  *
  * @author    Pankaj Narula
- * @version   $Id: PNGReader.java,v 1.8 2003/03/06 21:25:45 jeremias Exp $
+ * @version   $Id$
  */
 public class PNGReader implements ImageReader {
 
@@ -51,6 +51,7 @@ public class PNGReader implements ImageReader {
 
         if (supported) {
             FopImage.ImageInfo info = getDimension(header);
+            info.originalURI = uri;
             info.mimeType = getMimeType();
             info.inputStream = bis;
             return info;
index f5328d04ecf3b62e611c2057211c84ff8750b171..d7f433f3cc0af41236efe307aa9fbf1333fe1da3 100644 (file)
@@ -166,6 +166,7 @@ public class SVGReader implements ImageReader {
 
                 FopImage.ImageInfo info = new FopImage.ImageInfo();
 
+                info.originalURI = uri;
                 info.mimeType = getMimeType();
                 info.str = SVGDOMImplementation.SVG_NAMESPACE_URI;
 
index 3d8a82309c5fae33d340aa1b7ed7b17a0046bf93..fa79c2e79cf2fce52106871b7f408f8778166b2a 100644 (file)
@@ -30,7 +30,7 @@ import org.apache.fop.apps.FOUserAgent;
  * ImageReader object for TIFF image type.
  *
  * @author    Pankaj Narula, Michael Lee
- * @version   $Id: TIFFReader.java,v 1.9 2003/03/06 21:25:45 jeremias Exp $
+ * @version   $Id$
  */
 public class TIFFReader implements ImageReader {
 
@@ -62,6 +62,7 @@ public class TIFFReader implements ImageReader {
 
         if (supported) {
             FopImage.ImageInfo info = getDimension(header);
+            info.originalURI = uri;
             info.mimeType = getMimeType();
             info.inputStream = bis;
             return info;
index 55ebc5dfd0a52b010e7887ba6a34ef3f8a0be667..b8d9203acb190dc21a01d6d61a2b577524abdc18 100644 (file)
@@ -62,6 +62,7 @@ public class XMLReader implements ImageReader {
             FOUserAgent ua)
         throws IOException {
         FopImage.ImageInfo info = loadImage(uri, fis, ua);
+        info.originalURI = uri;
         if (info != null) {
             IOUtils.closeQuietly(fis);
         }
index be0c50aa63c5ea36d874d7be92b462e04d81f847..1d4202454768c4781d8da7d0bd89e32eac131772 100644 (file)
@@ -307,7 +307,6 @@ public class PSGraphics2D extends AbstractGraphics2D {
         private int width;
         private int bitsPerPixel;
         private ColorSpace colorSpace;
-        private int bitmapSiye;
         private byte[] bitmaps;
         private byte[] mask;
         private Color transparentColor;
@@ -326,6 +325,10 @@ public class PSGraphics2D extends AbstractGraphics2D {
             return "application/octet-stream";
         }
 
+        public String getOriginalURI() {
+            return "temp-image:" + this.toString();
+        }
+        
         /**
          * @see org.apache.fop.image.FopImage#load(int, org.apache.commons.logging.Log)
          */
index ebc67a4dff8271edfc2d7ab856f899da60336564..b4c3d5f4306dd46c303c0e9c7191666abc475176 100644 (file)
@@ -22,18 +22,15 @@ import java.awt.color.ColorSpace;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import org.apache.commons.io.output.CountingOutputStream;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.fop.image.EPSImage;
 import org.apache.fop.image.FopImage;
 import org.apache.fop.image.JpegImage;
-import org.apache.fop.image.XMLImage;
 import org.apache.fop.util.ASCII85OutputStream;
 import org.apache.fop.util.Finalizable;
 import org.apache.fop.util.FlateEncodeOutputStream;
 import org.apache.fop.util.RunLengthEncodeOutputStream;
-import org.w3c.dom.Document;
 
 /**
  * Utility code for rendering images in PostScript. 
@@ -72,7 +69,10 @@ public class PSImageUtils {
         byte[] imgmap = img.getBitmaps();
 
         gen.saveGraphicsState();
-        gen.commentln("%FOPBeginBitmap: " + img.getMimeType());
+        gen.writeln(x + " " + y + " translate");
+        gen.writeln(w + " " + h + " scale");
+
+        gen.commentln("%FOPBeginBitmap: " + img.getMimeType() + " " + img.getOriginalURI());
         if (img.getColorSpace().getType() == ColorSpace.TYPE_CMYK) {
             gen.writeln("/DeviceCMYK setcolorspace");
         } else if (img.getColorSpace().getType() == ColorSpace.CS_GRAY) {
@@ -81,9 +81,6 @@ public class PSImageUtils {
             gen.writeln("/DeviceRGB setcolorspace");
         }
 
-        gen.writeln(x + " " + y + " translate");
-        gen.writeln(w + " " + h + " scale");
-
         gen.writeln("{{");
         // Template: (RawData is used for the EOF signal only)
         // gen.write("/RawData currentfile <first filter> filter def");