You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/10/09 02:16:28 UTC

svn commit: r1630259 - in /pdfbox/trunk: pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/ pdfbox/src/main/java/org/apache/pdfbox/util/ pdfbox/src/test/java/org/apache/pdfbox/ pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ ...

Author: jahewson
Date: Thu Oct  9 00:16:27 2014
New Revision: 1630259

URL: http://svn.apache.org/r1630259
Log:
PDFBOX-2387: Move imageio utilities to pdfbox.tools

Added:
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/ImageIOUtil.java
      - copied, changed from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/JPEGUtil.java
      - copied, changed from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/MetaUtil.java
      - copied, changed from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/TIFFUtil.java
      - copied, changed from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java
    pdfbox/trunk/tools/src/test/java/org/apache/pdfbox/tools/TestImageIOUtils.java
      - copied, changed from r1630256, pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
    pdfbox/trunk/tools/src/test/resources/input/
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/jpeg_demo.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/jpeg_demo.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/png_demo.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/png_demo.pdf
    pdfbox/trunk/tools/src/test/resources/input/ImageIOUtil/raw_image_demo.pdf
      - copied unchanged from r1630256, pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/raw_image_demo.pdf
Removed:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/NullOutputStream.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JBIG2Image.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestCMYK.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestGrey.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/JPXTestRGB.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/ccitt4-cib-test.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/jpeg_demo.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/png_demo.pdf
    pdfbox/trunk/pdfbox/src/test/resources/input/ImageIOUtil/raw_image_demo.pdf
Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
    pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFToImage.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java
    pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Thu Oct  9 00:16:27 2014
@@ -23,8 +23,15 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Iterator;
 
+import javax.imageio.IIOImage;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
+import javax.imageio.stream.ImageOutputStream;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.filter.MissingImageReaderException;
 import org.apache.pdfbox.io.IOUtils;
@@ -32,7 +39,7 @@ import org.apache.pdfbox.pdmodel.PDDocum
 import javax.imageio.ImageIO;
 import javax.imageio.ImageReader;
 import javax.imageio.stream.ImageInputStream;
-import org.apache.pdfbox.util.ImageIOUtil;
+import org.w3c.dom.Element;
 
 /**
  * Factory for creating a PDImageXObject containing a JPEG compressed image.
@@ -170,10 +177,12 @@ public final class JPEGFactory extends I
         }
         if (image.getTransparency() == Transparency.BITMASK)
         {
-            throw new UnsupportedOperationException("BITMASK Transparency JPEG compression is not useful, use LosslessImageFactory instead");
+            throw new UnsupportedOperationException("BITMASK Transparency JPEG compression is not" +
+                    " useful, use LosslessImageFactory instead");
         }
         WritableRaster alphaRaster = image.getAlphaRaster();
-        BufferedImage alphaImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
+        BufferedImage alphaImage = new BufferedImage(image.getWidth(), image.getHeight(),
+                BufferedImage.TYPE_BYTE_GRAY);
         alphaImage.setData(alphaRaster);
         return alphaImage;
     }
@@ -188,7 +197,7 @@ public final class JPEGFactory extends I
 
         // create XObject
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ImageIOUtil.writeImage(awtColorImage, "jpeg", baos, dpi, quality);
+        encodeImageToJPEGStream(awtColorImage, quality, dpi, baos);
         ByteArrayInputStream byteStream = new ByteArrayInputStream(baos.toByteArray());
         
         
@@ -206,4 +215,49 @@ public final class JPEGFactory extends I
 
         return pdImage;
     }
+
+    private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi,
+                                                OutputStream out) throws IOException
+    {
+        // encode to JPEG
+        ImageOutputStream ios = null;
+        ImageWriter imageWriter = null;
+        try
+        {
+            // find JAI writer
+            imageWriter = ImageIO.getImageWritersBySuffix("jpeg").next();
+            ios = ImageIO.createImageOutputStream(out);
+            imageWriter.setOutput(ios);
+
+            // add compression
+            JPEGImageWriteParam jpegParam = (JPEGImageWriteParam)imageWriter.getDefaultWriteParam();
+            jpegParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
+            jpegParam.setCompressionQuality(quality);
+
+            // add metadata
+            ImageTypeSpecifier imageTypeSpecifier = new ImageTypeSpecifier(image);
+            IIOMetadata data = imageWriter.getDefaultImageMetadata(imageTypeSpecifier, jpegParam);
+            Element tree = (Element)data.getAsTree("javax_imageio_jpeg_image_1.0");
+            Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0);
+            jfif.setAttribute("Xdensity", Integer.toString(dpi));
+            jfif.setAttribute("Ydensity", Integer.toString(dpi));
+            jfif.setAttribute("resUnits", "1"); // 1 = dots/inch
+
+            // write
+            imageWriter.write(data, new IIOImage(image, null, null), jpegParam);
+        }
+        finally
+        {
+            // clean up
+            IOUtils.closeQuietly(out);
+            if (ios != null)
+            {
+                ios.close();
+            }
+            if (imageWriter != null)
+            {
+                imageWriter.dispose();
+            }
+        }
+    }
 }

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/TestAll.java Thu Oct  9 00:16:27 2014
@@ -38,7 +38,6 @@ import org.apache.pdfbox.pdmodel.edit.Te
 import org.apache.pdfbox.pdmodel.graphics.optionalcontent.TestOptionalContentGroups;
 import org.apache.pdfbox.pdmodel.interactive.form.TestFields;
 import org.apache.pdfbox.util.TestDateUtil;
-import org.apache.pdfbox.util.TestImageIOUtils;
 import org.apache.pdfbox.util.TestMatrix;
 
 /**
@@ -97,7 +96,6 @@ public class TestAll extends TestCase
 
         suite.addTestSuite( TestIOUtils.class );
         suite.addTestSuite( TestRandomAccessBuffer.class );
-        suite.addTestSuite( TestImageIOUtils.class );
         suite.addTestSuite( TestPackedBitArray.class );
         suite.addTestSuite( TestCCITTFaxG31DDecodeInputStream.class );
 

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/PDInlineImageTest.java Thu Oct  9 00:16:27 2014
@@ -31,7 +31,6 @@ import org.apache.pdfbox.pdmodel.PDDocum
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
 import org.apache.pdfbox.rendering.PDFRenderer;
-import org.apache.pdfbox.util.ImageIOUtil;
 
 /**
  * Unit tests for PDInlineImage
@@ -114,7 +113,7 @@ public class PDInlineImageTest extends T
         assertEquals(height, image2.getHeight());
 
         // write and read
-        boolean writeOk = ImageIOUtil.writeImage(image1, "png", 
+        boolean writeOk = ImageIO.write(image1, "png",
                 new FileOutputStream(new File(testResultsDir + "/inline-grid1.png")));
         assertTrue(writeOk);
         BufferedImage bim1 = ImageIO.read(new File(testResultsDir + "/inline-grid1.png"));
@@ -122,7 +121,7 @@ public class PDInlineImageTest extends T
         assertEquals(width, bim1.getWidth());
         assertEquals(height, bim1.getHeight());
         
-        writeOk = ImageIOUtil.writeImage(image2, "png", 
+        writeOk = ImageIO.write(image2, "png",
                 new FileOutputStream(new File(testResultsDir + "/inline-grid2.png")));
         assertTrue(writeOk);
         BufferedImage bim2 = ImageIO.read(new File(testResultsDir + "/inline-grid2.png"));

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/pdmodel/graphics/image/ValidateXImage.java Thu Oct  9 00:16:27 2014
@@ -16,6 +16,7 @@
 package org.apache.pdfbox.pdmodel.graphics.image;
 
 import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.util.HashSet;
@@ -23,13 +24,15 @@ import java.util.Set;
 import static junit.framework.TestCase.assertEquals;
 import static junit.framework.TestCase.assertNotNull;
 import static junit.framework.TestCase.assertTrue;
+
+
+import javax.imageio.ImageIO;
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSStream;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
 import org.apache.pdfbox.rendering.PDFRenderer;
-import org.apache.pdfbox.util.ImageIOUtil;
 
 /**
  * Helper class to do some validations for PDImageXObject.
@@ -58,11 +61,11 @@ public class ValidateXImage
         assertEquals(ximage.getWidth(), ximage.getImage().getWidth());
         assertEquals(ximage.getHeight(), ximage.getImage().getHeight());
 
-        boolean writeOk = ImageIOUtil.writeImage(ximage.getImage(),
-                format, new NullOutputStream());
+        boolean writeOk = ImageIO.write(ximage.getImage(),
+                format, new ByteArrayOutputStream());
         assertTrue(writeOk);
-        writeOk = ImageIOUtil.writeImage(ximage.getOpaqueImage(),
-                format, new NullOutputStream());
+        writeOk = ImageIO.write(ximage.getOpaqueImage(),
+                format, new ByteArrayOutputStream());
         assertTrue(writeOk);
     }
 

Modified: pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFToImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFToImage.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFToImage.java (original)
+++ pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestPDFToImage.java Thu Oct  9 00:16:27 2014
@@ -236,7 +236,7 @@ public class TestPDFToImage extends Test
                 new File(fileName + ".rendererror").delete();
                 LOG.info("Writing: " + fileName);
                 new FileOutputStream(new File(fileName + ".writeerror")).close();
-                ImageIOUtil.writeImage(image, fileName, 96);
+                ImageIO.write(image, "PNG", new File(fileName));
                 new File(fileName + ".writeerror").delete();
             }
 

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/ExtractImages.java Thu Oct  9 00:16:27 2014
@@ -40,7 +40,7 @@ import org.apache.pdfbox.pdmodel.graphic
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceGray;
 import org.apache.pdfbox.pdmodel.graphics.color.PDDeviceRGB;
 import org.apache.pdfbox.pdmodel.graphics.image.TIFFInputStream;
-import org.apache.pdfbox.util.ImageIOUtil;
+import org.apache.pdfbox.tools.imageio.ImageIOUtil;
 import org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine;
 
 /**

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFReader.java Thu Oct  9 00:16:27 2014
@@ -40,7 +40,7 @@ import org.apache.pdfbox.tools.gui.Reade
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
-import org.apache.pdfbox.util.ImageIOUtil;
+import org.apache.pdfbox.tools.imageio.ImageIOUtil;
 
 /**
  * An proof-of-concept application to read PDF documents, with very basic functionality.

Modified: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java?rev=1630259&r1=1630258&r2=1630259&view=diff
==============================================================================
--- pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/PDFToImage.java Thu Oct  9 00:16:27 2014
@@ -32,7 +32,7 @@ import org.apache.pdfbox.pdmodel.common.
 import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
 import org.apache.pdfbox.rendering.ImageType;
 import org.apache.pdfbox.rendering.PDFRenderer;
-import org.apache.pdfbox.util.ImageIOUtil;
+import org.apache.pdfbox.tools.imageio.ImageIOUtil;
 
 /**
  * Convert a PDF document to an image.

Copied: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/ImageIOUtil.java (from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/ImageIOUtil.java?p2=pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/ImageIOUtil.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java&r1=1630256&r2=1630259&rev=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/ImageIOUtil.java Thu Oct  9 00:16:27 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.pdfbox.util;
+package org.apache.pdfbox.tools.imageio;
 
 import java.awt.image.BufferedImage;
 import java.io.File;
@@ -34,7 +34,7 @@ import javax.imageio.metadata.IIOMetadat
 import javax.imageio.stream.ImageOutputStream;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import static org.apache.pdfbox.util.MetaUtil.STANDARD_METADATA_FORMAT;
+import static org.apache.pdfbox.tools.imageio.MetaUtil.STANDARD_METADATA_FORMAT;
 import org.w3c.dom.NodeList;
 
 /**
@@ -291,7 +291,7 @@ public class ImageIOUtil
     // sets the DPI metadata
     private static void setDPI(IIOMetadata metadata, int dpi, String formatName)
     {
-        IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(STANDARD_METADATA_FORMAT);
+        IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(MetaUtil.STANDARD_METADATA_FORMAT);
 
         IIOMetadataNode dimension = getOrCreateChildNode(root, "Dimension");
 
@@ -312,7 +312,7 @@ public class ImageIOUtil
 
         try
         {
-            metadata.mergeTree(STANDARD_METADATA_FORMAT, root);
+            metadata.mergeTree(MetaUtil.STANDARD_METADATA_FORMAT, root);
         }
         catch (IIOInvalidTreeException e)
         {

Copied: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/JPEGUtil.java (from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/JPEGUtil.java?p2=pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/JPEGUtil.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java&r1=1630256&r2=1630259&rev=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/JPEGUtil.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/JPEGUtil.java Thu Oct  9 00:16:27 2014
@@ -13,13 +13,13 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.pdfbox.util;
+package org.apache.pdfbox.tools.imageio;
 
 import javax.imageio.metadata.IIOInvalidTreeException;
 import javax.imageio.metadata.IIOMetadata;
 import javax.imageio.metadata.IIOMetadataNode;
-import static org.apache.pdfbox.util.MetaUtil.JPEG_NATIVE_FORMAT;
-import static org.apache.pdfbox.util.MetaUtil.debugLogMetadata;
+import static org.apache.pdfbox.tools.imageio.MetaUtil.JPEG_NATIVE_FORMAT;
+import static org.apache.pdfbox.tools.imageio.MetaUtil.debugLogMetadata;
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
@@ -39,11 +39,11 @@ class JPEGUtil
      */
     static void updateMetadata(IIOMetadata metadata, int dpi) throws IIOInvalidTreeException
     {
-        debugLogMetadata(metadata, JPEG_NATIVE_FORMAT);
+        MetaUtil.debugLogMetadata(metadata, MetaUtil.JPEG_NATIVE_FORMAT);
 
         // https://svn.apache.org/viewvc/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 root = (Element) metadata.getAsTree(MetaUtil.JPEG_NATIVE_FORMAT);
         NodeList jvarNodeList = root.getElementsByTagName("JPEGvariety");
         Element jvarChild;
         if (jvarNodeList.getLength() == 0)
@@ -86,6 +86,6 @@ class JPEGUtil
         {
             jfifChild.setAttribute("thumbHeight", "0");
         }
-        metadata.setFromTree(JPEG_NATIVE_FORMAT, root); // mergeTree doesn't work for ARGB
+        metadata.setFromTree(MetaUtil.JPEG_NATIVE_FORMAT, root); // mergeTree doesn't work for ARGB
     }
 }

Copied: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/MetaUtil.java (from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/MetaUtil.java?p2=pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/MetaUtil.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java&r1=1630256&r2=1630259&rev=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/MetaUtil.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/MetaUtil.java Thu Oct  9 00:16:27 2014
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package org.apache.pdfbox.util;
+package org.apache.pdfbox.tools.imageio;
 
 import java.io.StringWriter;
 import javax.imageio.metadata.IIOMetadata;

Copied: pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/TIFFUtil.java (from r1630256, pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/TIFFUtil.java?p2=pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/TIFFUtil.java&p1=pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java&r1=1630256&r2=1630259&rev=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/TIFFUtil.java (original)
+++ pdfbox/trunk/tools/src/main/java/org/apache/pdfbox/tools/imageio/TIFFUtil.java Thu Oct  9 00:16:27 2014
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.pdfbox.util;
+package org.apache.pdfbox.tools.imageio;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -24,8 +24,8 @@ import javax.imageio.metadata.IIOInvalid
 import javax.imageio.metadata.IIOMetadata;
 import javax.imageio.metadata.IIOMetadataNode;
 import java.awt.image.BufferedImage;
-import static org.apache.pdfbox.util.MetaUtil.SUN_TIFF_FORMAT;
-import static org.apache.pdfbox.util.MetaUtil.debugLogMetadata;
+import static org.apache.pdfbox.tools.imageio.MetaUtil.SUN_TIFF_FORMAT;
+import static org.apache.pdfbox.tools.imageio.MetaUtil.debugLogMetadata;
 
 /**
  * Used by ImageIOUtil to write TIFF files.

Copied: pdfbox/trunk/tools/src/test/java/org/apache/pdfbox/tools/TestImageIOUtils.java (from r1630256, pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java)
URL: http://svn.apache.org/viewvc/pdfbox/trunk/tools/src/test/java/org/apache/pdfbox/tools/TestImageIOUtils.java?p2=pdfbox/trunk/tools/src/test/java/org/apache/pdfbox/tools/TestImageIOUtils.java&p1=pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java&r1=1630256&r2=1630259&rev=1630259&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/test/java/org/apache/pdfbox/util/TestImageIOUtils.java (original)
+++ pdfbox/trunk/tools/src/test/java/org/apache/pdfbox/tools/TestImageIOUtils.java Thu Oct  9 00:16:27 2014
@@ -14,10 +14,11 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.pdfbox.util;
+package org.apache.pdfbox.tools;
 
 import java.awt.Color;
 import java.awt.image.BufferedImage;
+import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.File;
 import java.io.FileInputStream;
@@ -35,9 +36,6 @@ import javax.imageio.metadata.IIOMetadat
 import javax.imageio.stream.ImageInputStream;
 
 import junit.framework.TestCase;
-import static junit.framework.TestCase.assertEquals;
-import static junit.framework.TestCase.assertNotNull;
-import static junit.framework.TestCase.assertTrue;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -46,11 +44,10 @@ import org.apache.pdfbox.pdmodel.PDPage;
 import org.apache.pdfbox.pdmodel.PDResources;
 import org.apache.pdfbox.pdmodel.graphics.PDXObject;
 import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
-import org.apache.pdfbox.pdmodel.graphics.image.NullOutputStream;
 import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
 import org.apache.pdfbox.rendering.ImageType;
 import org.apache.pdfbox.rendering.PDFRenderer;
-import org.apache.pdfbox.util.ImageIOUtil;
+import org.apache.pdfbox.tools.imageio.ImageIOUtil;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -91,7 +88,8 @@ public class TestImageIOUtils extends Te
                         {
                             suffix = "JPEG2000";
                         }
-                        boolean writeOK = ImageIOUtil.writeImage(imageObject.getImage(), suffix, new NullOutputStream());
+                        boolean writeOK = ImageIOUtil.writeImage(imageObject.getImage(), suffix,
+                                new ByteArrayOutputStream());
                         assertTrue(writeOK);
                     }
                 }
@@ -117,7 +115,7 @@ public class TestImageIOUtils extends Te
         LOG.info("Preparing to convert " + file.getName());
         try
         {
-            float dpi = 120;
+            float dpi = 36; // low DPI so that rendering is FAST
             document = PDDocument.load(file);
 
             // Save image resources of first page