You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2014/03/12 20:27:41 UTC

svn commit: r1576867 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util: ImageIOUtil.java JPEGUtil.java

Author: tilman
Date: Wed Mar 12 19:27:41 2014
New Revision: 1576867

URL: http://svn.apache.org/r1576867
Log:
PDFBOX-1977: set and test resolution for JPEG images

Added:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java   (with props)
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1576867&r1=1576866&r2=1576867&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Wed Mar 12 19:27:41 2014
@@ -152,14 +152,25 @@ public class ImageIOUtil
                 }
             }
 
-            // metadata
-            setDPI(metadata, dpi, formatName);
-
-            // TIFF metadata
             if (formatName.toLowerCase().startsWith("tif"))
             {
+                // TIFF metadata
                 TIFFUtil.updateMetadata(metadata, image, dpi);
             }
+            else if ("jpeg".equals(formatName.toLowerCase())
+                    || "jpg".equals(formatName.toLowerCase()))
+            {
+                // This segment must be run before other meta operations,
+                // or else "IIOInvalidTreeException: Invalid node: app0JFIF"
+                // The other (general) "meta" methods may not be used, because
+                // this will break the reading of the meta data in tests
+                JPEGUtil.updateMetadata(metadata, dpi);
+            }
+            else
+            {
+                // metadata
+                setDPI(metadata, dpi, formatName);
+            }
 
             // write
             imageOutput = ImageIO.createImageOutputStream(output);

Added: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java?rev=1576867&view=auto
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java (added)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java Wed Mar 12 19:27:41 2014
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2014 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.pdfbox.util;
+
+import java.awt.image.BufferedImage;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import org.w3c.dom.Element;
+
+/**
+ *
+ * @author Tilman Hausherr
+ */
+class JPEGUtil
+{
+    static final String JPEG_NATIVE_FORMAT = "javax_imageio_jpeg_image_1.0";
+
+    static void updateMetadata(IIOMetadata metadata, int dpi) throws IIOInvalidTreeException
+    {
+        // https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java
+        // http://docs.oracle.com/javase/6/docs/api/javax/imageio/metadata/doc-files/jpeg_metadata.html
+
+        Element root = (Element) metadata.getAsTree(JPEG_NATIVE_FORMAT);
+        Element child = (Element) root.getElementsByTagName("app0JFIF").item(0);
+        child.setAttribute("resUnits", "1"); // inch
+        child.setAttribute("Xdensity", Integer.toString(dpi));
+        child.setAttribute("Ydensity", Integer.toString(dpi));
+        metadata.mergeTree(JPEG_NATIVE_FORMAT, root);
+    }
+}

Propchange: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native