Repository: openmeetings Updated Branches: refs/heads/master 0eaffd3a2 -> 2403f45c1
[OPENMEETINGS-1674] tika is used to get image dimensions Project: http://git-wip-us.apache.org/repos/asf/openmeetings/repo Commit: http://git-wip-us.apache.org/repos/asf/openmeetings/commit/2403f45c Tree: http://git-wip-us.apache.org/repos/asf/openmeetings/tree/2403f45c Diff: http://git-wip-us.apache.org/repos/asf/openmeetings/diff/2403f45c Branch: refs/heads/master Commit: 2403f45c1076d259a535592682db4b8bdd31f675 Parents: 0eaffd3 Author: Maxim Solodovnik <[email protected]> Authored: Mon Jul 24 21:27:26 2017 +0700 Committer: Maxim Solodovnik <[email protected]> Committed: Mon Jul 24 21:27:26 2017 +0700 ---------------------------------------------------------------------- .../core/converter/BaseConverter.java | 4 -- .../core/converter/ImageConverter.java | 49 +++++++++++++------- .../apache/openmeetings/util/StoredFile.java | 4 ++ 3 files changed, 36 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/openmeetings/blob/2403f45c/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java index a8dffe2..24b877a 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/BaseConverter.java @@ -95,10 +95,6 @@ public abstract class BaseConverter { return getPath(CONFIG_IMAGEMAGIC_PATH, "convert") + EXEC_EXT; } - protected String getPathToIdentify() { - return getPath(CONFIG_IMAGEMAGIC_PATH, "identify") + EXEC_EXT; - } - protected File getStreamFolder(Recording recording) { return getStreamsSubDir(recording.getRoomId()); } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/2403f45c/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java ---------------------------------------------------------------------- diff --git a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java index 5bbf9be..adc921b 100644 --- a/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java +++ b/openmeetings-core/src/main/java/org/apache/openmeetings/core/converter/ImageConverter.java @@ -21,15 +21,21 @@ package org.apache.openmeetings.core.converter; import static org.apache.openmeetings.util.OmFileHelper.DOC_PAGE_PREFIX; import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_JPG; import static org.apache.openmeetings.util.OmFileHelper.EXTENSION_PNG; +import static org.apache.openmeetings.util.OmFileHelper.JPG_MIME_TYPE; +import static org.apache.openmeetings.util.OmFileHelper.PNG_MIME_TYPE; import static org.apache.openmeetings.util.OmFileHelper.getUploadProfilesUserDir; import static org.apache.openmeetings.util.OmFileHelper.profileFileName; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DOCUMENT_DPI; import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DOCUMENT_QUALITY; import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey; +import static org.apache.openmeetings.util.process.ConverterProcessResult.ZERO; +import static org.apache.tika.metadata.HttpHeaders.CONTENT_TYPE; import java.io.File; import java.io.FileFilter; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import org.apache.commons.io.FileUtils; import org.apache.openmeetings.db.dao.basic.ConfigurationDao; @@ -41,9 +47,15 @@ import org.apache.openmeetings.util.StoredFile; import org.apache.openmeetings.util.process.ConverterProcessResult; import org.apache.openmeetings.util.process.ConverterProcessResultList; import org.apache.openmeetings.util.process.ProcessHelper; +import org.apache.tika.metadata.Metadata; +import org.apache.tika.metadata.TIFF; +import org.apache.tika.parser.ParseContext; +import org.apache.tika.parser.Parser; +import org.apache.tika.parser.image.ImageParser; import org.red5.logging.Red5LoggerFactory; import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Autowired; +import org.xml.sax.helpers.DefaultHandler; public class ImageConverter extends BaseConverter { private static final Logger log = Red5LoggerFactory.getLogger(ImageConverter.class, webAppRootKey); @@ -64,7 +76,7 @@ public class ImageConverter extends BaseConverter { log.debug("##### convertImage destinationFile: " + jpg); returnMap.addItem("processJPG", convertSingleJpg(img, jpg)); } - returnMap.addItem("get JPG dimensions", initSize(f, jpg)); + returnMap.addItem("get JPG dimensions", initSize(f, jpg, JPG_MIME_TYPE)); return returnMap; } @@ -116,20 +128,23 @@ public class ImageConverter extends BaseConverter { return cfgDao.getConfValue(CONFIG_DOCUMENT_QUALITY, String.class, "90"); //TODO constant } - /** - * This method determines and set image size - * - * @param f - file item to set size - * @param img - image file used to determine size - * @return result of the operation - * @throws IOException in case exception is occured - */ - public ConverterProcessResult initSize(FileItem f, File img) throws IOException { - ConverterProcessResult res = ProcessHelper.executeScript("get image dimensions :: " + f.getId() - , new String[] {getPathToIdentify(), "-format", "%wx%h", img.getCanonicalPath()}); - Dimension dim = getDimension(res.getOut()); - f.setWidth(dim.width); - f.setHeight(dim.height); + private static ConverterProcessResult initSize(FileItem f, File img, String mime) { + ConverterProcessResult res = new ConverterProcessResult(); + res.setProcess("get image dimensions :: " + f.getId()); + final Parser parser = new ImageParser(); + try (InputStream is = new FileInputStream(img)) { + Metadata metadata = new Metadata(); + metadata.set(CONTENT_TYPE, mime); + parser.parse(is, new DefaultHandler(), metadata, new ParseContext()); + f.setWidth(Integer.valueOf(metadata.get(TIFF.IMAGE_WIDTH))); + f.setHeight(Integer.valueOf(metadata.get(TIFF.IMAGE_LENGTH))); + res.setExitCode(ZERO); + } catch (Exception e) { + log.error("Error while getting dimensions", e); + res.setError("Error while getting dimensions"); + res.setException(e.getMessage()); + res.setExitCode(-1); + } return res; } @@ -159,7 +174,7 @@ public class ImageConverter extends BaseConverter { * * @param pdf - input PDF document * @return - result of conversion - * @throws IOException in case IO exception occured + * @throws IOException in case IO exception occurred */ public ConverterProcessResultList convertDocument(ConverterProcessResultList list, FileItem f, File pdf) throws IOException { log.debug("convertDocument"); @@ -184,7 +199,7 @@ public class ImageConverter extends BaseConverter { } else { f.setCount(pages.length); } - list.addItem("get PNG page dimensions", initSize(f, pages[0])); + list.addItem("get PNG page dimensions", initSize(f, pages[0], PNG_MIME_TYPE)); } return list; } http://git-wip-us.apache.org/repos/asf/openmeetings/blob/2403f45c/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java ---------------------------------------------------------------------- diff --git a/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java b/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java index 919336a..562c5c3 100644 --- a/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java +++ b/openmeetings-util/src/main/java/org/apache/openmeetings/util/StoredFile.java @@ -189,4 +189,8 @@ public class StoredFile { public String getExt() { return ext; } + + public MediaType getMime() { + return mime; + } }
