Aleksander Machniak
2013-03-05 139635f18985d568ad76b9f101c19542eaee2349
Fix thumbnail size when GD extension is used for image resize (#1488985)
3 files modified
24 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/lib/Roundcube/rcube_image.php 21 ●●●● patch | view | raw | blame | history
program/steps/mail/get.inc 2 ●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Fix thumbnail size when GD extension is used for image resize (#1488985)
- Display user-friendly message on IMAP "over quota" errors (#1484164)
- Display notice that message is encrypted also for application/pkcs7-mime messages (#1488526)
- Extended archive plugin with user-configurable options to store messages into subfolders
program/lib/Roundcube/rcube_image.php
@@ -77,7 +77,8 @@
    }
    /**
     * Resize image to a given size
     * Resize image to a given size. Use only to shrink an image.
     * If an image is smaller than specified size it will be not resized.
     *
     * @param int    $size      Max width/height size
     * @param string $filename  Output filename
@@ -131,12 +132,15 @@
        if ($props['gd_type']) {
            if ($props['gd_type'] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) {
                $image = imagecreatefromjpeg($this->image_file);
                $type  = 'jpg';
            }
            else if($props['gd_type'] == IMAGETYPE_GIF && function_exists('imagecreatefromgif')) {
                $image = imagecreatefromgif($this->image_file);
                $type  = 'gid';
            }
            else if($props['gd_type'] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')) {
                $image = imagecreatefrompng($this->image_file);
                $type  = 'png';
            }
            else {
                // @TODO: print error to the log?
@@ -144,6 +148,14 @@
            }
            $scale  = $size / max($props['width'], $props['height']);
            // Imagemagick resize is implemented in shrinking mode (see -resize argument above)
            // we do the same here, if an image is smaller than specified size
            // we do nothing but copy original file to destination file
            if ($scale > 1) {
                return $this->image_file == $filename || copy($this->image_file, $filename) ? $type : false;
            }
            $width  = $props['width']  * $scale;
            $height = $props['height'] * $scale;
@@ -162,15 +174,12 @@
            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) {
@@ -245,6 +254,10 @@
            else if ($type == self::TYPE_PNG) {
                $result = imagepng($image, $filename, 6, PNG_ALL_FILTERS);
            }
            if ($result) {
                return true;
            }
        }
        // @TODO: print error to the log?
program/steps/mail/get.inc
@@ -73,7 +73,7 @@
      fclose($fp);
      $image = new rcube_image($orig_name);
      if ($imgtype = $image->resize($RCMAIL->config->get('image_thumbnail_size', 240), $cache_file, true)) {
      if ($imgtype = $image->resize($thumbnail_size, $cache_file, true)) {
        $mimetype = 'image/' . $imgtype;
        unlink($orig_name);
      }