From: <fg...@us...> - 2010-06-07 21:56:18
|
Revision: 2631 http://openutils.svn.sourceforge.net/openutils/?rev=2631&view=rev Author: fgiust Date: 2010-06-07 21:56:11 +0000 (Mon, 07 Jun 2010) Log Message: ----------- MEDIA-149 Add support for ico image format Modified Paths: -------------- trunk/openutils-mgnlmedia/pom.xml trunk/openutils-mgnlmedia/src/main/assembly/assembly-bundle.xml trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaImageDlg.xml trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediatypes.image.xml trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java Added Paths: ----------- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/IcoUtils.java trunk/openutils-mgnlmedia/src/test/resources/images/openmind.ico Modified: trunk/openutils-mgnlmedia/pom.xml =================================================================== --- trunk/openutils-mgnlmedia/pom.xml 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/pom.xml 2010-06-07 21:56:11 UTC (rev 2631) @@ -1,8 +1,9 @@ -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <parent> <groupId>net.sourceforge.openutils</groupId> <artifactId>openutils-parent</artifactId> - <version>1.3</version> + <version>1.5</version> </parent> <modelVersion>4.0.0</modelVersion> <packaging>jar</packaging> @@ -191,6 +192,11 @@ </exclusion> </exclusions> </dependency> + <dependency> + <groupId>nl.ikarus.nxt.priv.imageio.icoreader</groupId> + <artifactId>ICOReader</artifactId> + <version>1.04</version> + </dependency> </dependencies> <repositories> <repository> Modified: trunk/openutils-mgnlmedia/src/main/assembly/assembly-bundle.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/assembly/assembly-bundle.xml 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/assembly/assembly-bundle.xml 2010-06-07 21:56:11 UTC (rev 2631) @@ -34,6 +34,7 @@ <include>com.flazr:flazr:*</include> <include>commons-cli:commons-cli:*</include> <include>org.jboss.netty:netty:*</include> + <include>nl.ikarus.nxt.priv.imageio.icoreader:*</include> </includes> </dependencySet> </dependencySets> Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/setup/MediaModuleVersionHandler.java 2010-06-07 21:56:11 UTC (rev 2631) @@ -171,21 +171,35 @@ "parseremotefiles", Boolean.TRUE)); + // add "jpeg" tasks.add(new ChangeExistingPropertyTask( ContentRepository.CONFIG, "/modules/media/dialogs/mediaImageDlg/tabImage/original", "extensions", "jpg,gif,png", "jpg,jpeg,gif,png")); - tasks.add(new ChangeExistingPropertyTask( ContentRepository.CONFIG, "/modules/media/mediatypes/image", "extensions", "jpg,gif,png", "jpg,jpeg,gif,png")); - + // add "ico" + tasks.add(new ChangeExistingPropertyTask( + ContentRepository.CONFIG, + "/modules/media/dialogs/mediaImageDlg/tabImage/original", + "extensions", + "jpg,jpeg,gif,png", + "jpg,jpeg,gif,png,ico")); + + tasks.add(new ChangeExistingPropertyTask( + ContentRepository.CONFIG, + "/modules/media/mediatypes/image", + "extensions", + "jpg,jpeg,gif,png", + "jpg,jpeg,gif,png,ico")); + // install stk support if (isModuleInstalled("standard-templating-kit")) { Modified: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/types/impl/ImageTypeHandler.java 2010-06-07 21:56:11 UTC (rev 2631) @@ -19,15 +19,20 @@ package net.sourceforge.openutils.mgnlmedia.media.types.impl; +import info.magnolia.cms.beans.runtime.FileProperties; import info.magnolia.cms.core.Content; +import info.magnolia.cms.core.NodeData; import info.magnolia.cms.util.NodeDataUtil; +import java.awt.image.BufferedImage; import java.io.InputStream; import net.sourceforge.openutils.mgnlmedia.media.configuration.MediaConfigurationManager; +import net.sourceforge.openutils.mgnlmedia.media.utils.IcoUtils; import net.sourceforge.openutils.mgnlmedia.media.utils.ImageUtils; import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.devlib.schmidt.imageinfo.ImageInfo; import org.slf4j.Logger; @@ -88,6 +93,7 @@ InputStream stream = null; try { + NodeData nodeData = getOriginalFileNodeData(media); stream = getOriginalFileNodeData(media).getStream(); ImageInfo ii = new ImageInfo(); ii.setInput(stream); @@ -98,6 +104,19 @@ NodeDataUtil.getOrCreateAndSet(media, METADATA_HEIGHT, ii.getHeight()); media.save(); } + else if (StringUtils.equals(nodeData.getAttribute(FileProperties.EXTENSION), "ico")) + { + BufferedImage bi = IcoUtils.createBufferedImage(nodeData); + if (bi != null) + { + + NodeDataUtil.getOrCreateAndSet(media, METADATA_BITDEPTH, bi.getColorModel().getPixelSize()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_WIDTH, bi.getWidth()); + NodeDataUtil.getOrCreateAndSet(media, METADATA_HEIGHT, bi.getHeight()); + media.save(); + } + bi.flush(); + } } catch (Throwable e) { Added: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/IcoUtils.java =================================================================== --- trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/IcoUtils.java (rev 0) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/IcoUtils.java 2010-06-07 21:56:11 UTC (rev 2631) @@ -0,0 +1,83 @@ +/** + * + * Magnolia SimpleMedia Module (http://www.openmindlab.com/lab/products/media.html) + * Copyright (C)2008 - 2010, Openmind S.r.l. http://www.openmindonline.it + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +package net.sourceforge.openutils.mgnlmedia.media.utils; + +import info.magnolia.cms.core.NodeData; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; + +import org.apache.commons.io.IOUtils; + + +/** + * @author fgiust + * @version $Id$ + */ +public class IcoUtils +{ + + public static BufferedImage createBufferedImage(NodeData image) throws IOException + { + // this should work for any image type, but better don't change the ImageIO.read() that worked till + // now... + InputStream is = image.getStream(); + try + { + nl.ikarus.nxt.priv.imageio.icoreader.lib.ICOReaderSpi.registerIcoReader(); + ImageInputStream in = ImageIO.createImageInputStream(is); + Iterator<ImageReader> it = ImageIO.getImageReaders(in); + ImageReader r = null; + while (it.hasNext()) + { + + try + { + r = it.next(); + r.setInput(in); + + BufferedImage read = r.read(-1); + + return read; + + } + catch (Throwable ex) + { + IOUtils.closeQuietly(is); + is = image.getStream(); + in = ImageIO.createImageInputStream(image.getStream()); + } + } + } + finally + { + IOUtils.closeQuietly(is); + } + + return null; + } + +} Property changes on: trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/IcoUtils.java ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native 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-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtils.java 2010-06-07 21:56:11 UTC (rev 2631) @@ -96,7 +96,7 @@ */ public static String RESOLUTION_PROPERTY = "resolution"; - private static final String[] extensions = new String[]{"jpg", "jpeg", "gif", "png" }; + private static final String[] extensions = new String[]{"jpg", "gif", "png" }; static { @@ -351,16 +351,16 @@ * Save a resolution for an image to a node (in resolutions/res-[width]x[height]/data.jpg) * @param image image to save * @param saveTo node to save to - * @param extension extension + * @param outputformat extension * @param quality image quality * @param forceProgressive true to force progressive mode * @throws RepositoryException exception in jcr operations * @throws IOException exception converting image to jpg */ - public static void saveResolution(BufferedImage image, Content saveTo, String extension, float quality, + public static void saveResolution(BufferedImage image, Content saveTo, String outputformat, float quality, boolean forceProgressive) throws RepositoryException, IOException { - saveResolution(image, saveTo, null, extension, quality, forceProgressive); + saveResolution(image, saveTo, null, outputformat, quality, forceProgressive); } /** @@ -368,13 +368,13 @@ * @param image image to save * @param saveTo node to save to * @param name name for this resolution - * @param extension extension + * @param outputformat extension * @param quality image quality * @param forceProgressive true to force progressive mode * @throws RepositoryException exception in jcr operations * @throws IOException exception converting image to jpg */ - public static void saveResolution(BufferedImage image, Content saveTo, String name, String extension, + public static void saveResolution(BufferedImage image, Content saveTo, String name, String outputformat, float quality, boolean forceProgressive) throws RepositoryException, IOException { @@ -382,7 +382,7 @@ try { - stream = getStream(image, extension, quality, forceProgressive); + stream = getStream(image, outputformat, quality, forceProgressive); if (stream == null) { @@ -419,13 +419,13 @@ log.info("setting value to {}", nd.getHandle()); nd.setValue(stream); - String mimetype = "image/" + extension; - if ("jpg".equals(extension)) + String mimetype = "image/" + outputformat; + if ("jpg".equals(outputformat)) { mimetype = "image/jpeg"; } nd.setAttribute(ImageUtils.RESOLUTION_PROPERTY, originalRes); - nd.setAttribute(FileProperties.PROPERTY_EXTENSION, extension); + nd.setAttribute(FileProperties.PROPERTY_EXTENSION, outputformat); nd.setAttribute(FileProperties.PROPERTY_FILENAME, saveTo.getName()); nd.setAttribute(FileProperties.PROPERTY_CONTENTTYPE, mimetype); nd.setAttribute(FileProperties.PROPERTY_LASTMODIFIED, GregorianCalendar.getInstance(TimeZone @@ -470,6 +470,12 @@ throws IOException { + // don't write ico file, use png + if (StringUtils.equalsIgnoreCase(extension, "ico")) + { + extension = "png"; + } + final File tempFile = File.createTempFile("image-", "." + extension); FileOutputStream fos = new FileOutputStream(tempFile); @@ -591,7 +597,7 @@ /** * Check if the resolution for a media is already present. Otherwise create it - * @param media media to check the resolutoin on + * @param media media to check the resolution on * @param resolutionTarget target resolution * @return false if resolution doesn't exist and there is a problem in generate it; true otherwise */ @@ -709,18 +715,10 @@ + image.getContentLength()); } - String extension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); - if (!Arrays.asList(extensions).contains(extension)) + String outputextension = image.getAttribute(FileProperties.PROPERTY_EXTENSION); + if (!Arrays.asList(extensions).contains(outputextension)) { - try - { - image.setAttribute(FileProperties.PROPERTY_EXTENSION, "jpg"); - } - catch (RepositoryException e) - { - throw new RuntimeException(e); - } - extension = "jpg"; + outputextension = "png"; } BufferedImage original = createBufferedImage(image); @@ -764,12 +762,23 @@ } if ("thumbnail".equals(resolutionTarget) || "preview".equals(resolutionTarget)) { - ImageUtils - .saveResolution(img, node, resolutionTarget, extension, quality, forceProgressive); + ImageUtils.saveResolution( + img, + node, + resolutionTarget, + outputextension, + quality, + forceProgressive); } else { - ImageUtils.saveResolution(img, node, resolutionName, extension, quality, forceProgressive); + ImageUtils.saveResolution( + img, + node, + resolutionName, + outputextension, + quality, + forceProgressive); } } catch (RepositoryException e) @@ -944,7 +953,7 @@ try { - String ext = image.getAttribute("extension"); + String ext = image.getAttribute(FileProperties.EXTENSION); if (StringUtils.equalsIgnoreCase(ext, "jpg") || StringUtils.equalsIgnoreCase(ext, "jpeg")) { @@ -961,6 +970,14 @@ e); } } + else if (StringUtils.equalsIgnoreCase(ext, "ico") || StringUtils.equalsIgnoreCase(ext, "bmp")) + { + BufferedImage buffered = IcoUtils.createBufferedImage(image); + if (buffered != null) + { + return buffered; + } + } return ImageIO.read(is); } Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaImageDlg.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaImageDlg.xml 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.dialogs.mediaImageDlg.xml 2010-06-07 21:56:11 UTC (rev 2631) @@ -100,7 +100,7 @@ <sv:value>mediaFile</sv:value> </sv:property> <sv:property sv:name="extensions" sv:type="String"> - <sv:value>jpg,jpeg,gif,png</sv:value> + <sv:value>jpg,jpeg,gif,png,ico</sv:value> </sv:property> <sv:property sv:name="label" sv:type="String"> <sv:value>media.dialogs.tabImage.image.label</sv:value> Modified: trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediatypes.image.xml =================================================================== --- trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediatypes.image.xml 2010-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/main/resources/mgnl-bootstrap/media-nooverwrite/config.modules.media.mediatypes.image.xml 2010-06-07 21:56:11 UTC (rev 2631) @@ -16,7 +16,7 @@ <sv:value>true</sv:value> </sv:property> <sv:property sv:name="extensions" sv:type="String"> - <sv:value>jpg,jpeg,gif,png</sv:value> + <sv:value>jpg,jpeg,gif,png,ico</sv:value> </sv:property> <sv:property sv:name="i18nBasename" sv:type="String"> <sv:value>net.sourceforge.openutils.mgnlmedia.media.lang.messages</sv:value> 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-06-07 21:05:31 UTC (rev 2630) +++ trunk/openutils-mgnlmedia/src/test/java/net/sourceforge/openutils/mgnlmedia/media/utils/ImageUtilsTest.java 2010-06-07 21:56:11 UTC (rev 2631) @@ -147,6 +147,18 @@ * @throws Exception */ @Test + public void testIco() throws Exception + { + + NodeData ico = new FileNodeData("/images/openmind.ico"); + BufferedImage bufferedImage = ImageUtils.createBufferedImage(ico); + Assert.assertNotNull(bufferedImage); + } + + /** + * @throws Exception + */ + @Test public void testBadImageTxt() throws Exception { Added: trunk/openutils-mgnlmedia/src/test/resources/images/openmind.ico =================================================================== (Binary files differ) Property changes on: trunk/openutils-mgnlmedia/src/test/resources/images/openmind.ico ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |