From f5a7e12fdfc1ed559bcb1780dda5af2fc10af474 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Sat, 24 Mar 2012 13:57:31 -0400
Subject: [PATCH] - Improve ImageMagick's identify isage, fix possible issue with spaces in path (#1488325)

---
 program/include/rcube_image.php |   36 +++++++++++++++++++++++-------------
 1 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/program/include/rcube_image.php b/program/include/rcube_image.php
index 9fe15fe..79dcad6 100644
--- a/program/include/rcube_image.php
+++ b/program/include/rcube_image.php
@@ -40,8 +40,7 @@
      */
     public function props()
     {
-        $rcmail = rcmail::get_instance();
-
+        // use GD extension
         if (function_exists('getimagesize') && ($imsize = @getimagesize($this->image_file))) {
             $width   = $imsize[0];
             $height  = $imsize[1];
@@ -49,12 +48,9 @@
             $type    = image_type_to_extension($imsize['2'], false);
         }
 
-        if (!$type && ($cmd = $rcmail->config->get('im_identify_path', false))) {
-            $id = rcmail::exec($cmd. ' 2>/dev/null {in}', array('in' => $this->image_file));
-            list(, $type, $size) = explode(' ', strtolower($id));
-            if ($size) {
-                list($width, $height) = explode('x', $size);
-            }
+        // use ImageMagick
+        if (!$type && ($data = $this->identify())) {
+            list($type, $width, $height) = $data;
         }
 
         if ($type) {
@@ -66,7 +62,6 @@
             );
         }
     }
-
 
     /**
      * Resize image to a given size
@@ -81,7 +76,6 @@
         $result   = false;
         $rcmail   = rcmail::get_instance();
         $convert  = $rcmail->config->get('im_convert_path', false);
-        $identify = $rcmail->config->get('im_identify_path', false);
         $props    = $this->props();
 
         if (!$filename) {
@@ -93,10 +87,10 @@
             $p['out']  = $filename;
             $p['in']   = $this->image_file;
             $p['size'] = $size.'x'.$size;
-            $p['type'] = $type = $props['type'];
+            $type      = $props['type'];
 
-            if (!$type) {
-                list(, $p['type']) = explode(' ', strtolower(rcmail::exec($identify . ' 2>/dev/null {in}', $p))); // for things like eps
+            if (!$type && ($data = $this->identify())) {
+                $type = $data[0];
             }
 
             $type = strtr($type, array("jpeg" => "jpg", "tiff" => "tif", "ps" => "eps", "ept" => "eps"));
@@ -162,4 +156,20 @@
         return false;
     }
 
+    /**
+     * Identify command handler.
+     */
+    private function identify()
+    {
+        $rcmail = rcmail::get_instance();
+
+        if ($cmd = $rcmail->config->get('im_identify_path')) {
+            $args = array('in' => $this->image_file, 'format' => "%m %[fx:w] %[fx:h]");
+            $id   = rcmail::exec($cmd. ' 2>/dev/null -format {format} {in}', $args);
+
+            if ($id) {
+                return explode(' ', strtolower($id));
+            }
+        }
+    }
 }

--
Gitblit v1.9.1