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

root's picture

Version 1 - Replace in modules/netpbm/classes/NetPbmToolkit.class:

case 'thumbnail':
            /* Don't enlarge images for a thumbnail */
            $preserveMetaData = false;
            if ($width <= $parameters[0] && $height <= $parameters[0]) {
                break;
            } else {
                /* fall through to scale */
            }
with:
case 'thumbnail':
            /* Create the thumbnail with fixed width */
            $preserveMetaData = false;
            $aspect = $height / $width;
            $targetWidth = $parameters[0];
            $ysize = round($targetWidth * $aspect);
            $xsize = $parameters[0];
            $transform[] = array($this->_pnmCmd('pnmscale'),
                '--quiet', '-xsize', $xsize, '-ysize', $ysize);
            break;

Version 2 - replace in modules/netpbm/classes/NetPbmToolkit.class:

case 'thumbnail':
            /* Don't enlarge images for a thumbnail */
            $preserveMetaData = false;
            if ($width <= $parameters[0] && $height <= $parameters[0]) {
                break;
            } else {
                /* fall through to scale */
            }
with:
case 'thumbnail':
            /* Create the thumbnail with fixed width */
            $preserveMetaData = false;
            if (isset($width)) {
                list ($width, $height) = GalleryUtilities::scaleThumbnailToFit(
                   $width, $height, $parameters[0]);
            }
            $transform[] = array($this->_pnmCmd('pnmscale'),
                 '--quiet', '-xsize', $width, '-ysize', $height);
            break;
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