From f5a7e12fdfc1ed559bcb1780dda5af2fc10af474 Mon Sep 17 00:00:00 2001 From: alecpl Date: Sat, 24 Mar 2012 17:57:31 +0000 Subject: - Improve ImageMagick's identify isage, fix possible issue with spaces in path (#1488325) --- program/include/rcube_image.php | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/program/include/rcube_image.php b/program/include/rcube_image.php index 9fe15fe54..79dcad691 100644 --- a/program/include/rcube_image.php +++ b/program/include/rcube_image.php @@ -40,8 +40,7 @@ class rcube_image */ 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 @@ class rcube_image $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) { @@ -67,7 +63,6 @@ class rcube_image } } - /** * Resize image to a given size * @@ -81,7 +76,6 @@ class rcube_image $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 @@ class rcube_image $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 @@ class rcube_image 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)); + } + } + } } -- cgit v1.2.3