Author: michiel
Date: 2009-06-03 15:20:55 +0200 (Wed, 03 Jun 2009)
New Revision: 35615

Modified:
   
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/AbstractImages.java
   
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/Attachments.java
   
mmbase/trunk/applications/resources/src/org/mmbase/util/images/ImageMagickImageInformer.java
Log:
several fixes related to MMB-1810. Avoid storing the complete image in memory.

Modified: 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/AbstractImages.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/AbstractImages.java
      2009-06-03 12:29:26 UTC (rev 35614)
+++ 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/AbstractImages.java
      2009-06-03 13:20:55 UTC (rev 35615)
@@ -210,10 +210,11 @@
             }
         }
         Dimension dim;
-        byte[] data = node.getByteValue(Imaging.FIELD_HANDLE);
-        if (data == null || data.length == 0) {
+
+        if (node.isNull(Imaging.FIELD_HANDLE) || 
node.getSize(Imaging.FIELD_HANDLE) == 0) {
             dim = getDimensionForEmptyHandle(node);
         } else {
+            java.io.InputStream  data = 
node.getInputStreamValue(Imaging.FIELD_HANDLE);
             ImageInformer ii = Factory.getImageInformer();
             try {
                 dim = ii.getDimension(data);

Modified: 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/Attachments.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/Attachments.java
 2009-06-03 12:29:26 UTC (rev 35614)
+++ 
mmbase/trunk/applications/resources/src/org/mmbase/module/builders/Attachments.java
 2009-06-03 13:20:55 UTC (rev 35615)
@@ -103,7 +103,7 @@
         super.checkHandle(node);
         if (getField(FIELD_SIZE) != null) {
             if (node.getIntValue(FIELD_SIZE) == -1) {
-                node.setValue(FIELD_SIZE, 
node.getByteValue(FIELD_HANDLE).length);
+                node.setValue(FIELD_SIZE, node.getSize(FIELD_HANDLE));
             }
         }
     }

Modified: 
mmbase/trunk/applications/resources/src/org/mmbase/util/images/ImageMagickImageInformer.java
===================================================================
--- 
mmbase/trunk/applications/resources/src/org/mmbase/util/images/ImageMagickImageInformer.java
        2009-06-03 12:29:26 UTC (rev 35614)
+++ 
mmbase/trunk/applications/resources/src/org/mmbase/util/images/ImageMagickImageInformer.java
        2009-06-03 13:20:55 UTC (rev 35615)
@@ -1,11 +1,11 @@
 /*
- 
+
 This software is OSI Certified Open Source Software.
 OSI Certified is a certification mark of the Open Source Initiative.
- 
+
 The license (Mozilla version 1.0) can be read at the MMBase site.
 See http://www.MMBase.org/license
- 
+
  */
 package org.mmbase.util.images;
 
@@ -28,7 +28,7 @@
  * @version $Id$
  */
 public class ImageMagickImageInformer implements ImageInformer {
-    
+
     private static final Logger log = 
Logging.getLoggerInstance(ImageMagickImageInformer.class);
 
     // Currently only ImageMagick works, this are the default value's
@@ -46,24 +46,14 @@
 
     }
 
-    public Dimension getDimension(InputStream input) {
-        return new Dimension(-1, -1); // not implemented
-    }
-
-    public Dimension getDimension(byte[] input) throws IOException {
-
-        File file = File.createTempFile("ImageMagickImageInformer", null);
-        FileOutputStream image = new FileOutputStream(file);
-        image.write(input);
-        image.close();
-
+    protected Dimension getDimension(File file) throws IOException {
         try {
             CommandLauncher launcher = new CommandLauncher("ImageMagick's 
identify");
             ByteArrayOutputStream errorStream = new ByteArrayOutputStream();
             ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- 
+
             launcher.execute(identifyPath, new String[] 
{file.getCanonicalPath()});
-            launcher.waitAndRead(outputStream, errorStream); 
+            launcher.waitAndRead(outputStream, errorStream);
             String result =  new String(outputStream.toByteArray()).trim();
             Matcher matcher = IDENTIFY_PATTERN.matcher(result);
             if (! matcher.matches()) throw new IOException("'" + result + "' 
doesn't match " + IDENTIFY_PATTERN);
@@ -76,8 +66,25 @@
             file.delete();
         }
         return  new Dimension(0, 0);
+    }
 
+
+    public Dimension getDimension(InputStream input) throws IOException {
+        File file = File.createTempFile("ImageMagickImageInformer", null);
+        FileOutputStream image = new FileOutputStream(file);
+        IOUtil.copy(input, image);
+        image.close();
+        return getDimension(file);
     }
+
+    public Dimension getDimension(byte[] input) throws IOException {
+        File file = File.createTempFile("ImageMagickImageInformer", null);
+        FileOutputStream image = new FileOutputStream(file);
+        image.write(input);
+        image.close();
+        return  getDimension(file);
+
+    }
     public static void main(String[] args) {
         try {
             File file = new File(args[0]);
@@ -95,7 +102,7 @@
         } catch (IOException ioe) {
             throw new RuntimeException(ioe);
         }
-        
+
     }
 
 }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to