summaryrefslogtreecommitdiff
path: root/program/include/rcube_image.php
diff options
context:
space:
mode:
Diffstat (limited to 'program/include/rcube_image.php')
-rw-r--r--program/include/rcube_image.php268
1 files changed, 0 insertions, 268 deletions
diff --git a/program/include/rcube_image.php b/program/include/rcube_image.php
deleted file mode 100644
index b72a24c51..000000000
--- a/program/include/rcube_image.php
+++ /dev/null
@@ -1,268 +0,0 @@
-<?php
-
-/*
- +-----------------------------------------------------------------------+
- | program/include/rcube_image.php |
- | |
- | This file is part of the Roundcube Webmail client |
- | Copyright (C) 2005-2012, The Roundcube Dev Team |
- | Copyright (C) 2011-2012, Kolab Systems AG |
- | |
- | Licensed under the GNU General Public License version 3 or |
- | any later version with exceptions for skins & plugins. |
- | See the README file for a full license statement. |
- | |
- | PURPOSE: |
- | Image resizer and converter |
- | |
- +-----------------------------------------------------------------------+
- | Author: Thomas Bruederli <roundcube@gmail.com> |
- | Author: Aleksander Machniak <alec@alec.pl> |
- +-----------------------------------------------------------------------+
-*/
-
-/**
- * Image resizer and converter
- *
- * @package Framework
- * @subpackage Utils
- */
-class rcube_image
-{
- private $image_file;
-
- const TYPE_GIF = 1;
- const TYPE_JPG = 2;
- const TYPE_PNG = 3;
- const TYPE_TIF = 4;
-
- public static $extensions = array(
- self::TYPE_GIF => 'gif',
- self::TYPE_JPG => 'jpg',
- self::TYPE_PNG => 'png',
- self::TYPE_TIF => 'tif',
- );
-
-
- function __construct($filename)
- {
- $this->image_file = $filename;
- }
-
- /**
- * Get image properties.
- *
- * @return mixed Hash array with image props like type, width, height
- */
- public function props()
- {
- // use GD extension
- if (function_exists('getimagesize') && ($imsize = @getimagesize($this->image_file))) {
- $width = $imsize[0];
- $height = $imsize[1];
- $gd_type = $imsize['2'];
- $type = image_type_to_extension($imsize['2'], false);
- }
-
- // use ImageMagick
- if (!$type && ($data = $this->identify())) {
- list($type, $width, $height) = $data;
- }
-
- if ($type) {
- return array(
- 'type' => $type,
- 'gd_type' => $gd_type,
- 'width' => $width,
- 'height' => $height,
- );
- }
- }
-
- /**
- * Resize image to a given size
- *
- * @param int $size Max width/height size
- * @param string $filename Output filename
- * @param boolean $browser_compat Convert to image type displayable by any browser
- *
- * @return mixed Output type on success, False on failure
- */
- public function resize($size, $filename = null, $browser_compat = false)
- {
- $result = false;
- $rcube = rcube::get_instance();
- $convert = $rcube->config->get('im_convert_path', false);
- $props = $this->props();
-
- if (!$filename) {
- $filename = $this->image_file;
- }
-
- // use Imagemagick
- if ($convert) {
- $p['out'] = $filename;
- $p['in'] = $this->image_file;
- $p['size'] = $size.'x'.$size;
- $type = $props['type'];
-
- if (!$type && ($data = $this->identify())) {
- $type = $data[0];
- }
-
- $type = strtr($type, array("jpeg" => "jpg", "tiff" => "tif", "ps" => "eps", "ept" => "eps"));
- $p['intype'] = $type;
-
- // convert to an image format every browser can display
- if ($browser_compat && !in_array($type, array('jpg','gif','png'))) {
- $type = 'jpg';
- }
-
- $p += array('type' => $type, 'types' => "bmp,eps,gif,jp2,jpg,png,svg,tif", 'quality' => 75);
- $p['-opts'] = array('-resize' => $p['size'].'>');
-
- if (in_array($type, explode(',', $p['types']))) { // Valid type?
- $result = rcube::exec($convert . ' 2>&1 -flatten -auto-orient -colorspace RGB -quality {quality} {-opts} {intype}:{in} {type}:{out}', $p);
- }
-
- if ($result === '') {
- return $type;
- }
- }
-
- // use GD extension
- $gd_types = array(IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG);
- if ($props['gd_type'] && in_array($props['gd_type'], $gd_types)) {
- if ($props['gd_type'] == IMAGETYPE_JPEG) {
- $image = imagecreatefromjpeg($this->image_file);
- }
- elseif($props['gd_type'] == IMAGETYPE_GIF) {
- $image = imagecreatefromgif($this->image_file);
- }
- elseif($props['gd_type'] == IMAGETYPE_PNG) {
- $image = imagecreatefrompng($this->image_file);
- }
-
- $scale = $size / max($props['width'], $props['height']);
- $width = $props['width'] * $scale;
- $height = $props['height'] * $scale;
-
- $new_image = imagecreatetruecolor($width, $height);
-
- // Fix transparency of gif/png image
- if ($props['gd_type'] != IMAGETYPE_JPEG) {
- imagealphablending($new_image, false);
- imagesavealpha($new_image, true);
- $transparent = imagecolorallocatealpha($new_image, 255, 255, 255, 127);
- imagefilledrectangle($new_image, 0, 0, $width, $height, $transparent);
- }
-
- imagecopyresampled($new_image, $image, 0, 0, 0, 0, $width, $height, $props['width'], $props['height']);
- $image = $new_image;
-
- if ($props['gd_type'] == IMAGETYPE_JPEG) {
- $result = imagejpeg($image, $filename, 75);
- $type = 'jpg';
- }
- elseif($props['gd_type'] == IMAGETYPE_GIF) {
- $result = imagegif($image, $filename);
- $type = 'gid';
- }
- elseif($props['gd_type'] == IMAGETYPE_PNG) {
- $result = imagepng($image, $filename, 6, PNG_ALL_FILTERS);
- $type = 'png';
- }
-
- if ($result) {
- return $type;
- }
- }
-
- // @TODO: print error to the log?
- return false;
- }
-
- /**
- * Convert image to a given type
- *
- * @param int $type Destination file type (see class constants)
- * @param string $filename Output filename (if empty, original file will be used
- * and filename extension will be modified)
- *
- * @return bool True on success, False on failure
- */
- public function convert($type, $filename = null)
- {
- $rcube = rcube::get_instance();
- $convert = $rcube->config->get('im_convert_path', false);
-
- if (!$filename) {
- $filename = $this->image_file;
-
- // modify extension
- if ($extension = self::$extensions[$type]) {
- $filename = preg_replace('/\.[^.]+$/', '', $filename) . '.' . $extension;
- }
- }
-
- // use ImageMagick
- if ($convert) {
- $p['in'] = $this->image_file;
- $p['out'] = $filename;
- $p['type'] = self::$extensions[$type];
-
- $result = rcube::exec($convert . ' 2>&1 -colorspace RGB -quality 75 {in} {type}:{out}', $p);
-
- if ($result === '') {
- return true;
- }
- }
-
- // use GD extension (TIFF isn't supported)
- $props = $this->props();
- $gd_types = array(IMAGETYPE_JPEG, IMAGETYPE_GIF, IMAGETYPE_PNG);
-
- if ($props['gd_type'] && in_array($props['gd_type'], $gd_types)) {
- if ($props['gd_type'] == IMAGETYPE_JPEG) {
- $image = imagecreatefromjpeg($this->image_file);
- }
- else if ($props['gd_type'] == IMAGETYPE_GIF) {
- $image = imagecreatefromgif($this->image_file);
- }
- else if ($props['gd_type'] == IMAGETYPE_PNG) {
- $image = imagecreatefrompng($this->image_file);
- }
-
- if ($type == self::TYPE_JPG) {
- $result = imagejpeg($image, $filename, 75);
- }
- else if ($type == self::TYPE_GIF) {
- $result = imagegif($image, $filename);
- }
- else if ($type == self::TYPE_PNG) {
- $result = imagepng($image, $filename, 6, PNG_ALL_FILTERS);
- }
- }
-
- // @TODO: print error to the log?
- return false;
- }
-
- /**
- * Identify command handler.
- */
- private function identify()
- {
- $rcube = rcube::get_instance();
-
- if ($cmd = $rcube->config->get('im_identify_path')) {
- $args = array('in' => $this->image_file, 'format' => "%m %[fx:w] %[fx:h]");
- $id = rcube::exec($cmd. ' 2>/dev/null -format {format} {in}', $args);
-
- if ($id) {
- return explode(' ', strtolower($id));
- }
- }
- }
-
-}