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>