From: <mol...@us...> - 2010-12-28 13:14:01
|
Revision: 3195 http://openutils.svn.sourceforge.net/openutils/?rev=3195&view=rev Author: molaschi Date: 2010-12-28 13:13:55 +0000 (Tue, 28 Dec 2010) Log Message: ----------- MEDIA-196 works with every temp file behaviour Modified Paths: -------------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2010-12-27 20:16:16 UTC (rev 3194) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2010-12-28 13:13:55 UTC (rev 3195) @@ -377,14 +377,18 @@ public static void saveResolution(BufferedImage image, Content saveTo, String name, String outputformat, float quality, boolean forceProgressive) throws RepositoryException, IOException { - final File tempFile = getTempFile(image, outputformat, quality, forceProgressive); - InputStream stream = null; + CountBytesBufferedInputStream stream = null; try { - stream = new BufferedInputStream(new FileInputStream(tempFile)); + stream = new CountBytesBufferedInputStream(getStream(image, outputformat, quality, forceProgressive)); + if (stream == null) + { + throw new IllegalArgumentException("Stream is null"); + } + Content resolutions = getResolutionsNode(saveTo); if (resolutions == null) { @@ -428,13 +432,12 @@ .getDefault())); nd.setAttribute(FileProperties.PROPERTY_WIDTH, "" + image.getWidth()); nd.setAttribute(FileProperties.PROPERTY_HEIGHT, "" + image.getHeight()); - nd.setAttribute(FileProperties.PROPERTY_SIZE, "" + tempFile.length()); + nd.setAttribute(FileProperties.PROPERTY_SIZE, "" + stream.getCount()); } } finally { IOUtils.closeQuietly(stream); - tempFile.delete(); } } @@ -455,15 +458,15 @@ } /** - * Get a temporary file for an image and the target file extension + * Get an inputstream for an image and the target file extension * @param image image to get the inputstream from * @param extension target file extension * @param quality image quality * @param forceProgressive true if image has to be saved as progressive mode - * @return temporary file + * @return inputstream * @throws IOException */ - public static File getTempFile(BufferedImage image, String extension, float quality, boolean forceProgressive) + public static InputStream getStream(BufferedImage image, String extension, float quality, boolean forceProgressive) throws IOException { @@ -576,7 +579,20 @@ out.flush(); IOUtils.closeQuietly(out); - return tempFile; + return new FileInputStream(tempFile) + { + + /** + * {@inheritDoc} + */ + @Override + public void close() throws IOException + { + tempFile.delete(); + super.close(); + } + + }; } /** @@ -1019,4 +1035,81 @@ } } + static class CountBytesBufferedInputStream extends BufferedInputStream + { + + private int count = 0; + + /** + * @param in + * @param size + */ + public CountBytesBufferedInputStream(InputStream in, int size) + { + super(in, size); + count = 0; + } + + /** + * @param in + */ + public CountBytesBufferedInputStream(InputStream in) + { + super(in); + count = 0; + } + + /** + * {@inheritDoc} + */ + @Override + public synchronized int read() throws IOException + { + count++; + return super.read(); + } + + /** + * {@inheritDoc} + */ + @Override + public synchronized void reset() throws IOException + { + count = 0; + super.reset(); + } + + /** + * {@inheritDoc} + */ + @Override + public int read(byte[] b) throws IOException + { + int read = super.read(b); + count += read; + return read; + } + + /** + * {@inheritDoc} + */ + @Override + public synchronized int read(byte[] b, int off, int len) throws IOException + { + int read = super.read(b, off, len); + count += read; + return read; + } + + /** + * Returns the count. + * @return the count + */ + public int getCount() + { + return count; + } + + } + } Modified: trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java =================================================================== --- trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java 2010-12-27 20:16:16 UTC (rev 3194) +++ trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java 2010-12-28 13:13:55 UTC (rev 3195) @@ -23,13 +23,17 @@ import info.magnolia.cms.util.FactoryUtil; import java.awt.image.BufferedImage; +import java.io.BufferedOutputStream; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; import java.util.HashMap; import java.util.Map; import net.sourceforge.openutils.mgnlmedia.media.configuration.ImageProcessorsManager; -import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; import org.testng.Assert; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; @@ -71,13 +75,16 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 100, 100); - File originalTempFile = ImageUtils.getTempFile(bufferedImage, "jpg", 1.0F, false); + InputStream is = ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false); - File tempFile = File.createTempFile("image", ".gif"); - FileUtils.copyFile(originalTempFile, tempFile); + File tempFile = File.createTempFile("image", ".jpg"); + OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); + IOUtils.copy(is, os); + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + tempFile.delete(); - originalTempFile.delete(); } @@ -95,13 +102,16 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 100, 100); - File originalTempFile = ImageUtils.getTempFile(bufferedImage, "jpg", 1.0F, false); + InputStream is = ImageUtils.getStream(bufferedImage, "jpg", 1.0F, false); - File tempFile = File.createTempFile("image", ".gif"); - FileUtils.copyFile(originalTempFile, tempFile); + File tempFile = File.createTempFile("image", ".jpg"); + OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); + IOUtils.copy(is, os); + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + tempFile.delete(); - originalTempFile.delete(); } @@ -120,13 +130,16 @@ parameters.put("background", "FF0096"); bufferedImage = ImageUtils.getImageForResolution(bufferedImage, "O300x300;background=FF0096", parameters); - File originalTempFile = ImageUtils.getTempFile(bufferedImage, "png", 1.0F, false); + InputStream is = ImageUtils.getStream(bufferedImage, "png", 1.0F, false); - File tempFile = File.createTempFile("image", ".gif"); - FileUtils.copyFile(originalTempFile, tempFile); + File tempFile = File.createTempFile("image", ".png"); + OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); + IOUtils.copy(is, os); + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + tempFile.delete(); - originalTempFile.delete(); } @@ -180,13 +193,16 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 1, 1); - File originalTempFile = ImageUtils.getTempFile(bufferedImage, "gif", 0.8F, false); + InputStream is = ImageUtils.getStream(bufferedImage, "gif", 0.8F, false); File tempFile = File.createTempFile("image", ".gif"); - FileUtils.copyFile(originalTempFile, tempFile); + OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); + IOUtils.copy(is, os); + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + tempFile.delete(); - originalTempFile.delete(); } /** @@ -204,12 +220,15 @@ bufferedImage = ImageUtils.resizeImage(bufferedImage, 200, 200); - File originalTempFile = ImageUtils.getTempFile(bufferedImage, "gif", 0.8F, false); + InputStream is = ImageUtils.getStream(bufferedImage, "gif", 0.8F, false); File tempFile = File.createTempFile("image", ".gif"); - FileUtils.copyFile(originalTempFile, tempFile); + OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile)); + IOUtils.copy(is, os); + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(os); + tempFile.delete(); - originalTempFile.delete(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |