You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by mi...@apache.org on 2010/08/17 14:25:29 UTC

svn commit: r986292 - in /incubator/clerezza/trunk/org.apache.clerezza.parent: ./ org.apache.clerezza.ext.org.im4java/ org.apache.clerezza.utils.imagemagick/ org.apache.clerezza.utils.imagemagick/src/main/java/org/apache/clerezza/utils/imagemagick/ org...

Author: mir
Date: Tue Aug 17 12:25:28 2010
New Revision: 986292

URL: http://svn.apache.org/viewvc?rev=986292&view=rev
Log:
CLEREZZA-265: reverted everything

Removed:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.ext.org.im4java/
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.utils.imagemagick/src/test/resources/org/apache/clerezza/utils/imagemagick/rocket.jpg
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
    incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml

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=986292&r1=986291&r2=986292&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 Tue Aug 17 12:25:28 2010
@@ -38,14 +38,5 @@
 			<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>
+</project>
\ No newline at end of file

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=986292&r1=986291&r2=986292&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 Tue Aug 17 12:25:28 2010
@@ -36,6 +36,7 @@ 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;
@@ -54,9 +55,6 @@ 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.
@@ -75,9 +73,9 @@ import org.im4java.core.Stream2BufferedI
 	@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=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="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="service.ranking", value="100")
 	})
 @Services({
@@ -89,13 +87,35 @@ 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
 	 */
@@ -118,17 +138,22 @@ 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()));
@@ -137,7 +162,8 @@ public class ImageMagickProvider extends
 			
 			if(output!=null && !output.contains("Version: ImageMagick")) {
 				ok = false;
-			}			
+			}
+			
 			
 		} catch (InterruptedException ex) {
 			Thread.currentThread().interrupt();
@@ -153,10 +179,49 @@ 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) {
@@ -170,76 +235,86 @@ public class ImageMagickProvider extends
 
 	@Override
 	public BufferedImage flip(BufferedImage image, int direction) {
-		IMOperation op = new IMOperation();
+		List<String> command = new ArrayList<String>(10);
+		command.add(convert);
 		if (direction == 0) {
-			op.flop();
+			command.add("-flop");
 		} else {
-			op.flip();
+			command.add("-flip");
 		}
-		return processImage(op, image);
+
+		return processImage(command, 100, image);
 	}
 
 	@Override
 	public BufferedImage rotate(BufferedImage image, int angle) {
-		IMOperation op = new IMOperation();
-		op.rotate(Double.valueOf(angle));
-		return processImage(op, image);
+		List<String> command = new ArrayList<String>(10);
+		command.add(convert);
+		command.add("-rotate");
+		command.add("" + angle);
+
+		return processImage(command, 100, image);
 	}
 
 	@Override
 	public BufferedImage resize(BufferedImage image, int newWidth, int newHeight) {
-		IMOperation op = new IMOperation();
-		op.resize(newWidth == 0 ? null : newWidth, newHeight == 0 ? null : newHeight, "!");
-		return processImage(op, image);
+		List<String> command = new ArrayList<String>(10);
+		command.add(convert);
+		command.add("-geometry");
+		command.add(newWidth + "x" + newHeight + "!");
+
+		return processImage(command, 100, image);
 	}
 
 	@Override
 	public BufferedImage resizeProportional(BufferedImage image, int newWidth,
 			int newHeight) {
-		IMOperation op = new IMOperation();
-		op.resize(newWidth == 0 ? null : newWidth, newWidth !=0 || newHeight == 0  ? null : newHeight);
-		return processImage(op, image);
+		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);
 	}
 
 	@Override
 	public BufferedImage resizeRelative(BufferedImage image,
 			float resizeFactorWidth, float resizeFactorHeight) {
-		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);
+		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);
 	}
 
 	@Override
 	public BufferedImage resizeRelativeProportional(BufferedImage image,
 			float resizeFactor) {
-		IMOperation op = new IMOperation();		
-		Integer width = Float.valueOf(image.getWidth() * resizeFactor).intValue();
-		op.resize(width);
-		return processImage(op, image);
-	}
+		List<String> command = new ArrayList<String>(10);
+		command.add(convert);
+		command.add("-geometry");
+		command.add(100 * resizeFactor + "%");
 
-	@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;
+	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);
+
+		return processImage(command, 100, image);
 	}
 
 	@Override
@@ -473,6 +548,35 @@ 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=986292&r1=986291&r2=986292&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 Tue Aug 17 12:25:28 2010
@@ -70,67 +70,6 @@ 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 {

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml?rev=986292&r1=986291&r2=986292&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/pom.xml Tue Aug 17 12:25:28 2010
@@ -23,7 +23,6 @@
 		<module>org.apache.clerezza.ext.com.hp.hpl.jena</module>
 		<module>org.apache.clerezza.ext.com.hp.hpl.jena.tdb</module>
 		<module>org.apache.clerezza.ext.com.ibm.icu</module>
-		<module>org.apache.clerezza.ext.org.im4java</module>
 		<module>org.apache.clerezza.ext.javax.mail</module>
 		<module>org.apache.clerezza.ext.org.jruby</module>
 		<module>org.apache.clerezza.ext.org.json.simple</module>
@@ -560,11 +559,6 @@
 				<version>0.5-incubating-SNAPSHOT</version>
 			</dependency>
 			<dependency>
-				<groupId>org.apache.clerezza.ext</groupId>
-				<artifactId>org.im4java</artifactId>
-				<version>0.1-incubating-SNAPSHOT</version>
-			</dependency>
-			<dependency>
 				<groupId>org.apache.clerezza</groupId>
 				<artifactId>org.apache.clerezza.rdf.utils</artifactId>
 				<version>0.13-incubating-SNAPSHOT</version>