/** * Convert an image to a given size and type using imagemagick (ensures input is an image) * * @param $p['in'] Input filename (mandatory) * @param $p['out'] Output filename (mandatory) * @param $p['size'] Width x height of resulting image, e.g. "160x60" * @param $p['type'] Output file type, e.g. "jpg" * @param $p['-opts'] Custom command line options to ImageMagick convert * @return Success of convert as true/false */ public static function imageconvert($p) { $result = false; $rcmail = rcmail::get_instance(); $convert = $rcmail->config->get('im_convert_path', false); $identify = $rcmail->config->get('im_identify_path', false); // imagemagick is required for this if (!$convert) { return false; } if (!(($imagetype = @exif_imagetype($p['in'])) && ($type = image_type_to_extension($imagetype, false)))) { list(, $type) = explode(' ', strtolower(rcmail::exec($identify . ' 2>/dev/null {in}', $p))); } # for things like eps $type = strtr($type, array("jpeg" => "jpg", "tiff" => "tif", "ps" => "eps", "ept" => "eps")); $p += array('type' => $type, 'types' => "bmp,eps,gif,jp2,jpg,png,svg,tif", 'quality' => 75); $p['-opts'] = array('-resize' => $p['size'] . '>') + (array) $p['-opts']; if (in_array($type, explode(',', $p['types']))) { # Valid type? $result = rcmail::exec($convert . ' 2>&1 -flatten -auto-orient -colorspace RGB -quality {quality} {-opts} {in} {type}:{out}', $p) === ""; } return $result; }
/** * 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)); } } }