Gallery2 - Gd - How to create thumbnails with fixed width while keeping the aspect ratio (variable height)

root's picture

Version 1 - Replace in modules/gd/classes/GdToolkit.class:

case 'thumbnail':
        case 'scale':
            /* $parameters[0]: target width, [1]: optional target height */
            $targetHeight = empty($parameters[1]) ? $parameters[0] : $parameters[1];
            /* Don't enlarge images for a thumbnail */
            if ($operationName == 'thumbnail'
                    && $width <= $parameters[0] && $height <= $targetHeight) {
                break;
            }
with:
case 'thumbnail':
            $aspect = $height / $width;
            $targetWidth = $parameters[0];
            $height = round($targetWidth * $aspect);
            $width = $parameters[0];
            list ($ret, $destRes) = $this->_resizeImageResource(
                $sourceRes, $width, $height, $hasTransparency);
            $this->_free($sourceRes);
            break;

        case 'scale':
            /* $parameters[0]: target width, [1]: optional target height */
            $targetHeight = empty($parameters[1]) ? $parameters[0] : $parameters[1];

Version 2 - replace in modules/gd/classes/GdToolkit.class:

case 'thumbnail':
        case 'scale':
            /* $parameters[0]: target width, [1]: optional target height */
            $targetHeight = empty($parameters[1]) ? $parameters[0] : $parameters[1];
            /* Don't enlarge images for a thumbnail */
            if ($operationName == 'thumbnail'
                    && $width <= $parameters[0] && $height <= $targetHeight) {
                break;
            }
with:
case 'thumbnail':
            list ($width, $height) = GalleryUtilities::scaleThumbnailToFit(
                     $width, $height, $parameters[0]);
            list ($ret, $destRes) = $this->_resizeImageResource(
                $sourceRes, $width, $height, $hasTransparency);
            $this->_free($sourceRes);
            break;

        case 'scale':
            /* $parameters[0]: target width, [1]: optional target height */
            $targetHeight = empty($parameters[1]) ? $parameters[0] : $parameters[1];
and add to modules/core/classes/GalleryUtilities.class:
function scaleThumbnailToFit($width, $height, $targetWidth, $targetHeight=null) {
 	$aspect = $height / $width;
 	$width = $targetWidth;
 	$height = round($targetWidth * $aspect);
 	return array($width, $height);
     }

Thou shalt not steal!

If you want to use this information on your own website, please remember: by doing copy/paste entirely it is always stealing and you should be ashamed of yourself! Have at least the decency to create your own text and comments and run the commands on your own servers and provide your output, not what I did!

Or at least link back to this website.

Recent content

root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root
root