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;
+       }
 }

Reply via email to