r908 - in trunk: . debian src/main/java/org/ourproject/kune/platf/server/manager/impl src/test/java/org/ourproject/kune/platf/server/manager/impl
Author: vjrj Date: 2008-10-14 15:25:31 +0200 (Tue, 14 Oct 2008) New Revision: 908 Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefault.java trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefaultTest.java trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.gif trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.jpg trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.png trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.tiff Modified: trunk/debian/TODO trunk/pom.xml Log: Complete - task Images server utilities Modified: trunk/debian/TODO =================================================================== --- trunk/debian/TODO 2008-10-14 00:23:09 UTC (rev 907) +++ trunk/debian/TODO 2008-10-14 13:25:31 UTC (rev 908) @@ -1,3 +1,4 @@ - create user kune - create /var/lib/kune/uploads and give permissions - create /var/lib/kune/lucene +- deps: libjmagick6-jni Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2008-10-14 00:23:09 UTC (rev 907) +++ trunk/pom.xml 2008-10-14 13:25:31 UTC (rev 908) @@ -87,7 +87,7 @@ <dependency> <groupId>jmagick</groupId> <artifactId>jmagick</artifactId> - <version>6.2.4</version> + <version>6.2.6-0</version> </dependency> <!-- xmpp --> Added: trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefault.java =================================================================== --- trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefault.java 2008-10-14 00:23:09 UTC (rev 907) +++ trunk/src/main/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefault.java 2008-10-14 13:25:31 UTC (rev 908) @@ -0,0 +1,105 @@ +package org.ourproject.kune.platf.server.manager.impl; + +import java.awt.Dimension; +import java.awt.Rectangle; + +import magick.ImageInfo; +import magick.MagickException; +import magick.MagickImage; + +public class ImageUtilsDefault { + + /** + * http://en.wikipedia.org/wiki/Thumbnail + */ + public static void createThumb(String fileOrig, String fileDest, int thumbDimension, int cropDimension) + throws MagickException { + if (thumbDimension < cropDimension) { + throw new IndexOutOfBoundsException("Thumb dimension must be bigger than crop dimension"); + } + MagickImage imageOrig = createImage(fileOrig); + Dimension origDimension = imageOrig.getDimension(); + int origHeight = origDimension.height; + int origWidth = origDimension.width; + Dimension proportionalDim = calculateProportionalDim(origWidth, origHeight, thumbDimension); + int x = calculateCenteredCoordinate(proportionalDim.width, cropDimension); + int y = calculateCenteredCoordinate(proportionalDim.height, cropDimension); + MagickImage scaled = scaleImage(imageOrig, proportionalDim.width, proportionalDim.height); + cropImage(scaled, fileDest, x, y, cropDimension, cropDimension); + } + + public static boolean cropImage(String fileOrig, String fileDest, int x, int y, int width, int height) + throws MagickException { + Rectangle rectangle = new Rectangle(x, y, width, height); + return cropImage(fileOrig, fileDest, rectangle); + } + + public static boolean cropImage(String fileOrig, String fileDest, Rectangle rectangle) throws MagickException { + return cropImage(createImage(fileOrig), fileDest, rectangle); + } + + public static Dimension getDimension(String file) throws MagickException { + MagickImage imageOrig = createImage(file); + return imageOrig.getDimension(); + } + + public static boolean scaleImage(String fileOrig, String fileDest, Dimension dimension) throws MagickException { + MagickImage imageOrig = createImage(fileOrig); + return scaleImage(imageOrig, fileDest, (int) dimension.getWidth(), (int) dimension.getHeight()); + } + + public static boolean scaleImage(String fileOrig, String fileDest, int width, int height) throws MagickException { + MagickImage imageOrig = createImage(fileOrig); + return scaleImage(imageOrig, fileDest, width, height); + } + + static int calculateCenteredCoordinate(int size, int crop) { + int i = (size - crop) / 2; + return i < 0 ? 0 : i; + } + + static Dimension calculateProportionalDim(int origWidth, int origHeight, int maxSize) { + boolean higher = origHeight > origWidth; + double height = higher ? (origHeight * maxSize / origWidth) : maxSize; + double width = !higher ? (origWidth * maxSize / origHeight) : maxSize; + if ((higher && origHeight <= maxSize) || (!higher && origWidth <= maxSize)) { + return new Dimension(origWidth, origHeight); + } + return new Dimension((int) width, (int) height); + } + + private static ImageInfo createEmptyImageInfo() throws MagickException { + ImageInfo info = new ImageInfo(); + return info; + } + + private static MagickImage createImage(String file) throws MagickException { + return new MagickImage(new ImageInfo(file)); + } + + private static boolean cropImage(MagickImage fileOrig, String fileDest, int x, int y, int width, int height) + throws MagickException { + Rectangle rectangle = new Rectangle(x, y, width, height); + return cropImage(fileOrig, fileDest, rectangle); + } + + private static boolean cropImage(MagickImage fileOrig, String fileDest, Rectangle rectangle) throws MagickException { + MagickImage cropped = fileOrig.cropImage(rectangle); + return writeImage(cropped, fileDest); + } + + private static MagickImage scaleImage(MagickImage imageOrig, int width, int height) throws MagickException { + return imageOrig.scaleImage(width, height); + } + + private static boolean scaleImage(MagickImage imageOrig, String fileDest, int width, int height) + throws MagickException { + MagickImage imageDest = scaleImage(imageOrig, width, height); + return writeImage(imageDest, fileDest); + } + + private static boolean writeImage(MagickImage imageDest, String fileDest) throws MagickException { + imageDest.setFileName(fileDest); + return imageDest.writeImage(createEmptyImageInfo()); + } +} Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefaultTest.java =================================================================== --- trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefaultTest.java 2008-10-14 00:23:09 UTC (rev 907) +++ trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/ImageUtilsDefaultTest.java 2008-10-14 13:25:31 UTC (rev 908) @@ -0,0 +1,143 @@ +package org.ourproject.kune.platf.server.manager.impl; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.awt.Dimension; +import java.io.File; + +import magick.MagickException; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * UnsatisfiedLinkError: problem with jmagick installation (in debian, apt-get + * install libjmagick6-jni, and add LD_LIBRARY_PATH=/usr/lib/jni/ to this test + * environment params + */ +public class ImageUtilsDefaultTest { + + private static final String IMG_PATH = "src/test/java/org/ourproject/kune/platf/server/manager/impl/"; + private static String[] images = { "orig.png", "orig.gif", "orig.jpg", "orig.tiff" }; + private static String imageDest; + + @AfterClass + public static void after() { + File file = new File(imageDest); + file.delete(); + } + + @BeforeClass + public static void before() { + imageDest = IMG_PATH + "output"; + } + + @Test + public void generateIcon() throws MagickException { + for (String image : images) { + ImageUtilsDefault.createThumb(IMG_PATH + image, imageDest, 16, 16); + Dimension dimension = ImageUtilsDefault.getDimension(imageDest); + assertEquals(16, (int) dimension.getHeight()); + assertEquals(16, (int) dimension.getWidth()); + } + } + + @Test + public void generateThumb() throws MagickException { + for (String image : images) { + ImageUtilsDefault.createThumb(IMG_PATH + image, imageDest, 100, 85); + Dimension dimension = ImageUtilsDefault.getDimension(imageDest); + assertEquals(85, (int) dimension.getHeight()); + assertEquals(85, (int) dimension.getWidth()); + } + } + + @Test + public void testProportionalHigher() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(500, 1000, 100); + assertEquals(100, proportionalDim.width); + assertEquals(200, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(50, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalHigherLikeSamples() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(1200, 1600, 100); + assertEquals(100, proportionalDim.width); + assertEquals(133, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(16, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalHigherSame() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(20, 100, 100); + assertEquals(20, proportionalDim.width); + assertEquals(100, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalHigherSmaller() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(20, 10, 100); + assertEquals(20, proportionalDim.width); + assertEquals(10, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalWider() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(1000, 500, 100); + assertEquals(200, proportionalDim.width); + assertEquals(100, proportionalDim.height); + assertEquals(50, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalWiderSame() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(100, 20, 100); + assertEquals(100, proportionalDim.width); + assertEquals(20, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testProportionalWiderSmaller() { + Dimension proportionalDim = ImageUtilsDefault.calculateProportionalDim(5, 10, 100); + assertEquals(5, proportionalDim.width); + assertEquals(10, proportionalDim.height); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.width, 100)); + assertEquals(0, ImageUtilsDefault.calculateCenteredCoordinate(proportionalDim.height, 100)); + } + + @Test + public void testResize() throws MagickException { + for (String image : images) { + assertTrue(ImageUtilsDefault.scaleImage(IMG_PATH + image, imageDest, 100, 100)); + Dimension dimension = ImageUtilsDefault.getDimension(imageDest); + assertEquals(100, (int) dimension.getHeight()); + assertEquals(100, (int) dimension.getWidth()); + } + } + + @Test + public void testSize() throws MagickException { + for (String image : images) { + Dimension dimension = ImageUtilsDefault.getDimension(IMG_PATH + image); + assertEquals(1600, (int) dimension.getHeight()); + assertEquals(1200, (int) dimension.getWidth()); + } + } + + @Test(expected = IndexOutOfBoundsException.class) + public void thumbSmallerThanCropMustFail() throws MagickException { + ImageUtilsDefault.createThumb(IMG_PATH + images[0], imageDest, 100, 200); + } +} Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.gif =================================================================== (Binary files differ) Property changes on: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.gif ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.jpg =================================================================== (Binary files differ) Property changes on: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.png =================================================================== (Binary files differ) Property changes on: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.tiff =================================================================== (Binary files differ) Property changes on: trunk/src/test/java/org/ourproject/kune/platf/server/manager/impl/orig.tiff ___________________________________________________________________ Name: svn:mime-type + application/octet-stream
participants (1)
-
vjrj