Author: mir
Date: Mon Aug 16 14:30:05 2010
New Revision: 985960

URL: http://svn.apache.org/viewvc?rev=985960&view=rev
Log:
CLEREZZA-265: imagemagick provider uses now im4java. The exception no longer 
occurs.

Added:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/resources/org/apache/clerezza/utils/imagemagick/rocket.jpg
   (with props)
Modified:
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/pom.xml
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ImageMagickProvider.java
    
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/java/org/apache/clerezza/utils/imagemagick/ImageMagickUtilsTest.java

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/pom.xml?rev=985960&r1=985959&r2=985960&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/pom.xml
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/pom.xml
 Mon Aug 16 14:30:05 2010
@@ -38,5 +38,14 @@
                        <groupId>org.apache.felix</groupId>
                        
<artifactId>org.apache.felix.scr.annotations</artifactId>
                </dependency>
+               <dependency>
+                       <groupId>org.apache.clerezza.ext</groupId>
+                       <artifactId>org.im4java</artifactId>
+               </dependency>
+               <dependency>
+                       <groupId>org.im4java</groupId>
+                       <artifactId>org.im4java</artifactId>
+                       <version>1.1.0</version>
+               </dependency>
        </dependencies>
-</project>
\ No newline at end of file
+</project>

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ImageMagickProvider.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ImageMagickProvider.java?rev=985960&r1=985959&r2=985960&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ImageMagickProvider.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ImageMagickProvider.java
 Mon Aug 16 14:30:05 2010
@@ -36,7 +36,6 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.imageio.ImageIO;
 
 import org.osgi.service.component.ComponentContext;
 import org.slf4j.Logger;
@@ -55,6 +54,9 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.felix.scr.annotations.Services;
+import org.im4java.core.ConvertCmd;
+import org.im4java.core.IMOperation;
+import org.im4java.core.Stream2BufferedImage;
 
 /**
  * This class implements interfaces that execute system calls to imageMagick.
@@ -73,9 +75,9 @@ import org.apache.felix.scr.annotations.
        @Property(name="convert", value="convert", description="Specifies the 
ImageMagick convert command."),
        @Property(name="identify", value="identify", description="Specifies the 
ImageMagick identify command."),
        @Property(name="release_number", intValue=6, description="Specifies 
ImageMagick release number (Syntax: 
release.version.majorRevision-minorRevision)."),
-       @Property(name="version_number", intValue=5, description="Specifies 
ImageMagick version number (Syntax: 
release.version.majorRevision-minorRevision)."),
-       @Property(name="major_release_number", intValue=2, 
description="Specifies ImageMagick major revision number (Syntax: 
release.version.majorRevision-minorRevision)."),
-       @Property(name="minor_release_number", intValue=10, 
description="Specifies ImageMagick minor revision number (Syntax: 
release.version.majorRevision-minorRevision)."),
+       @Property(name="version_number", intValue=3, description="Specifies 
ImageMagick version number (Syntax: 
release.version.majorRevision-minorRevision)."),
+       @Property(name="major_release_number", intValue=7, 
description="Specifies ImageMagick major revision number (Syntax: 
release.version.majorRevision-minorRevision)."),
+       @Property(name="minor_release_number", intValue=9, 
description="Specifies ImageMagick minor revision number (Syntax: 
release.version.majorRevision-minorRevision)."),
        @Property(name="service.ranking", value="100")
        })
 @Services({
@@ -87,35 +89,13 @@ public class ImageMagickProvider extends
 
        private String convert = "convert";
        private String identify = "identify";
-       private int imagemagickRelease = 6;
-       private int imagemagickVersion = 5;
-       private int imagemagickRevisionMajorNumber = 2;
-       private int imagemagickRevisionMinorNumber = 10;
+
 
        @Reference
        private Serializer serializer;
 
        private final Logger logger = LoggerFactory.getLogger(getClass());
 
-       protected void activate(ComponentContext cCtx) {
-               if (cCtx != null) {
-                       convert = (String) cCtx.getProperties().get("convert");
-                       identify = (String) 
cCtx.getProperties().get("identify");
-                       imagemagickRelease = (Integer) cCtx.getProperties().
-                               get("release_number");
-                       imagemagickVersion = (Integer) cCtx.getProperties().
-                               get("version_number");
-                       imagemagickRevisionMajorNumber = (Integer) 
cCtx.getProperties().
-                               get("major_release_number");
-                       imagemagickRevisionMinorNumber = (Integer) 
cCtx.getProperties().
-                               get("minor_release_number");
-               }
-               
-               checkImageMagickInstallation();
-               
-               logger.info("ImageMagickProvider activated");
-       }
-
        /**
         * Default Constructor
         */
@@ -138,22 +118,17 @@ public class ImageMagickProvider extends
                try {
                        List<String> command = new ArrayList<String>();
                        command.add(identify);
-                       command.add("--version");
+                       command.add("-version");
                        Process proc = execCommand(command);
                        
                        BufferedReader br = new BufferedReader(
                                        new 
InputStreamReader(proc.getInputStream()));
                        String output = br.readLine();
                        br.close();
-                       
-                       ok = checkImageMagickVersion(output, 
imagemagickRelease, 
-                                                               
imagemagickVersion, 
-                                                               
imagemagickRevisionMajorNumber, 
-                                                               
imagemagickRevisionMinorNumber);
-                       
+                                       
                        command.clear();
                        command.add(convert);
-                       command.add("--version");
+                       command.add("-version");
                        proc = execCommand(command);
                        
                        br = new BufferedReader(new 
InputStreamReader(proc.getInputStream()));
@@ -162,8 +137,7 @@ public class ImageMagickProvider extends
                        
                        if(output!=null && !output.contains("Version: 
ImageMagick")) {
                                ok = false;
-                       }
-                       
+                       }                       
                        
                } catch (InterruptedException ex) {
                        Thread.currentThread().interrupt();
@@ -179,49 +153,10 @@ public class ImageMagickProvider extends
                }
                
                if(!ok) {
-                       logger.error("ImageMagick version can not be verified. 
" +
-                       "Please make sure you have ImageMagick (>=" +
-                       imagemagickRelease + "." + imagemagickVersion + "." +
-                       imagemagickRevisionMajorNumber + "-" + 
-                       imagemagickRevisionMinorNumber +
-                       ") installed correctly");
-                       
                        throw new RuntimeException("ImageMagick not installed 
correctly.");
                }
        }
 
-       private boolean checkImageMagickVersion(String str, int release, int 
version,
-                       int revision_major_number, int revision_minor_number) {
-
-               Pattern pattern = Pattern.compile("(\\d+\\.){2}\\d+-\\d+");
-               Matcher matcher = pattern.matcher(str);
-
-               boolean error = false;
-               if (matcher.find()) {
-                       String versionString = matcher.group();
-                       String[] versionParts = versionString.split("\\.");
-                       if (Integer.parseInt(versionParts[0]) < release) {
-                               error = true;
-                       } else if (Integer.parseInt(versionParts[0]) == 
release) {
-                               if (Integer.parseInt(versionParts[1]) < 
version) {
-                                       error = true;
-                               } else if (Integer.parseInt(versionParts[1]) == 
version) {
-                                       String[] revisionParts = 
versionParts[2].split("-");
-                                       if (Integer.parseInt(revisionParts[0]) 
< revision_major_number) {
-                                               error = true;
-                                       } else if 
(Integer.parseInt(revisionParts[0]) == revision_major_number) {
-                                               if 
(Integer.parseInt(revisionParts[1]) < revision_minor_number) {
-                                                       error = true;
-                                               }
-                                       }
-                               }
-                       }
-                       return !error;
-               } else {
-                       return false;
-               }
-       }
-
        @Override
        public BufferedImage makeImageTranslucent(BufferedImage image,
                        float translucency) {
@@ -235,86 +170,76 @@ public class ImageMagickProvider extends
 
        @Override
        public BufferedImage flip(BufferedImage image, int direction) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
+               IMOperation op = new IMOperation();
                if (direction == 0) {
-                       command.add("-flop");
+                       op.flop();
                } else {
-                       command.add("-flip");
+                       op.flip();
                }
-
-               return processImage(command, 100, image);
+               return processImage(op, image);
        }
 
        @Override
        public BufferedImage rotate(BufferedImage image, int angle) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-rotate");
-               command.add("" + angle);
-
-               return processImage(command, 100, image);
+               IMOperation op = new IMOperation();
+               op.rotate(Double.valueOf(angle));
+               return processImage(op, image);
        }
 
        @Override
        public BufferedImage resize(BufferedImage image, int newWidth, int 
newHeight) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-geometry");
-               command.add(newWidth + "x" + newHeight + "!");
-
-               return processImage(command, 100, image);
+               IMOperation op = new IMOperation();
+               op.resize(newWidth == 0 ? null : newWidth, newHeight == 0 ? 
null : newHeight, "!");
+               return processImage(op, image);
        }
 
        @Override
        public BufferedImage resizeProportional(BufferedImage image, int 
newWidth,
                        int newHeight) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-geometry");
-               if (newWidth != 0) {
-                       command.add("" + newWidth);
-               } else {
-                       if (newHeight != 0) {
-                               command.add("x" + newHeight);
-                       } else {
-                               return image;
-                       }
-               }
-
-               return processImage(command, 100, image);
+               IMOperation op = new IMOperation();
+               op.resize(newWidth == 0 ? null : newWidth, newWidth !=0 || 
newHeight == 0  ? null : newHeight);
+               return processImage(op, image);
        }
 
        @Override
        public BufferedImage resizeRelative(BufferedImage image,
                        float resizeFactorWidth, float resizeFactorHeight) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-geometry");
-               command.add((100 * resizeFactorWidth) + "%x"
-                               + (100 * resizeFactorHeight) + "%");
-
-               return processImage(command, 100, image);
+               IMOperation op = new IMOperation();
+               Integer newWidth = Float.valueOf(image.getWidth() * 
resizeFactorWidth).intValue();
+               Integer newHeight = Float.valueOf(image.getHeight() * 
resizeFactorHeight).intValue();
+               op.resize(newWidth, newHeight, "!");
+               return processImage(op, image);
        }
 
        @Override
        public BufferedImage resizeRelativeProportional(BufferedImage image,
                        float resizeFactor) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-geometry");
-               command.add(100 * resizeFactor + "%");
-
-               return processImage(command, 100, image);
+               IMOperation op = new IMOperation();             
+               Integer width = Float.valueOf(image.getWidth() * 
resizeFactor).intValue();
+               op.resize(width);
+               return processImage(op, image);
        }
 
-       private BufferedImage crop(BufferedImage image, int newWidth, int 
newHeight) {
-               List<String> command = new ArrayList<String>(10);
-               command.add(convert);
-               command.add("-crop");
-               command.add(newWidth + "x" + newHeight);
+       @Override
+       public BufferedImage makeAThumbnail(BufferedImage image, int width, int 
height) {
+               IMOperation op = new IMOperation();
+               op.thumbnail(width, height);
+               return processImage(op, image);
+       }
 
-               return processImage(command, 100, image);
+       private BufferedImage processImage(IMOperation ops, BufferedImage 
image) {
+               ConvertCmd convertCmd = new ConvertCmd();
+               ops.addImage();
+               ops.addImage("jpg:-");
+               Stream2BufferedImage s2b = new Stream2BufferedImage();
+               convertCmd.setOutputConsumer(s2b);
+               try {
+                       convertCmd.run(ops, image);
+               } catch(Exception ex) {
+                       throw new RuntimeException(ex);
+               }
+               BufferedImage img = s2b.getImage();
+               return img;
        }
 
        @Override
@@ -548,35 +473,6 @@ public class ImageMagickProvider extends
                return null;
        }
 
-       
-       
-       private BufferedImage processImage(List<String> command, int quality,
-                       BufferedImage image) {
-               command.add("-quality");
-               command.add(String.valueOf(quality));
-               command.add("-");
-               command.add("-");
-               
-               ByteArrayOutputStream baos = new ByteArrayOutputStream();
-               try {
-                       if (ImageIO.write(image, "png", baos) == false) {
-                               logger.warn("Cannot write image to output 
stream");
-                               return null;
-                       }
-
-                       return ImageIO.read(execCommand(command, 
baos.toByteArray()).
-                                       getInputStream());
-                       
-               } catch (InterruptedException ex) {
-                       logger.warn("ImageMagick has been interrupted");
-                       Thread.currentThread().interrupt();
-                       return null;
-               } catch (IOException ex) {
-                       logger.warn("IOException while trying to execute {}", 
command);
-                       return null;
-               }
-       }
-
        private Process execCommand(List<String> command,
                        byte[]... inputData) throws IOException,
                        InterruptedException {

Modified: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/java/org/apache/clerezza/utils/imagemagick/ImageMagickUtilsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/java/org/apache/clerezza/utils/imagemagick/ImageMagickUtilsTest.java?rev=985960&r1=985959&r2=985960&view=diff
==============================================================================
--- 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/java/org/apache/clerezza/utils/imagemagick/ImageMagickUtilsTest.java
 (original)
+++ 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/java/org/apache/clerezza/utils/imagemagick/ImageMagickUtilsTest.java
 Mon Aug 16 14:30:05 2010
@@ -70,6 +70,67 @@ public class ImageMagickUtilsTest {
                BufferedImage bimg = ip.flip(ImageIO.read(in), 0);
                assert(bimg != null);
        }
+
+       @Test
+       public void resizeProportionalTest() throws IOException {
+               Assume.assumeTrue(correctlyInstalled);
+               ImageMagickProvider ip = new ImageMagickProvider();
+               BufferedImage inputImage = ImageIO.read(
+                               getClass().getResourceAsStream("rocket.jpg"));
+               BufferedImage outputImage = ip.resizeProportional(inputImage, 
200, 200);
+               assert(outputImage != null);
+               Assert.assertEquals(200, outputImage.getWidth());
+               Assert.assertEquals(250, outputImage.getHeight());
+       }
+
+       @Test
+       public void resizeTest() throws IOException {
+               Assume.assumeTrue(correctlyInstalled);
+               ImageMagickProvider ip = new ImageMagickProvider();
+               BufferedImage inputImage = ImageIO.read(
+                               getClass().getResourceAsStream("rocket.jpg"));
+               BufferedImage outputImage = ip.resize(inputImage, 200, 200);
+               assert(outputImage != null);
+               Assert.assertEquals(200, outputImage.getHeight());
+               Assert.assertEquals(200, outputImage.getWidth());
+       }
+
+       @Test
+       public void resizeRelativeProportionalTest() throws IOException {
+               Assume.assumeTrue(correctlyInstalled);
+               ImageMagickProvider ip = new ImageMagickProvider();
+               BufferedImage inputImage = ImageIO.read(
+                               getClass().getResourceAsStream("rocket.jpg"));
+               BufferedImage outputImage = 
ip.resizeRelativeProportional(inputImage, Float.valueOf(".5"));
+               assert(outputImage != null);
+               Assert.assertEquals(inputImage.getWidth() / 2, 
outputImage.getWidth());
+               Assert.assertEquals(inputImage.getHeight() / 2, 
outputImage.getHeight());
+       }
+       
+       @Test
+       public void resizeRelativeTest() throws IOException {
+               Assume.assumeTrue(correctlyInstalled);
+               ImageMagickProvider ip = new ImageMagickProvider();
+               BufferedImage inputImage = ImageIO.read(
+                               getClass().getResourceAsStream("rocket.jpg"));
+               BufferedImage outputImage = ip.resizeRelative(inputImage, 
Float.valueOf(".5"), 
+                               Float.valueOf(".25"));
+               assert(outputImage != null);
+               Assert.assertEquals(inputImage.getHeight() / 4, 
outputImage.getHeight());
+               Assert.assertEquals(inputImage.getWidth() / 2, 
outputImage.getWidth());
+       }
+
+       @Test
+       public void thumbnailTest() throws IOException {
+               Assume.assumeTrue(correctlyInstalled);
+               ImageMagickProvider ip = new ImageMagickProvider();
+               BufferedImage inputImage = ImageIO.read(
+                               getClass().getResourceAsStream("rocket.jpg"));
+               BufferedImage outputImage = ip.makeAThumbnail(inputImage, 200, 
200);
+               Assert.assertEquals(200, outputImage.getHeight());
+               Assert.assertEquals(160, outputImage.getWidth());
+               assert(outputImage != null);
+       }
        
        @Test
        public void extractMetaDataTest() throws IOException {

Added: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/resources/org/apache/clerezza/utils/imagemagick/rocket.jpg
URL: 
http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/resources/org/apache/clerezza/utils/imagemagick/rocket.jpg?rev=985960&view=auto
==============================================================================
Binary file - no diff available.

Propchange: 
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/resources/org/apache/clerezza/utils/imagemagick/rocket.jpg
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream


Reply via email to