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