Image Resizing
The accompanying PHP image resizing software is designed to quickly resize all images in a directory.
When an image is resized, it is saved in a new file. The resizing software leaves the original image as it was found.
The dimensions of the image are proportionally reduced to fit within your specified maximum width and maximum height measures. If the original image dimensions already fit within the maximums, no resizing is done.
The first version of this software was made 3 years ago for another project. A few things were updated to make this new version easier to use. And it has been named "Bulk Image Resize".
Bulk Image Resize is likely to be used mostly to create thumbnail images for web page menus or to accompany image descriptions for clicking to the larger image or to a related article. There are other uses. Resizing images larger than thumbnails for embedding within articles, for example.
When an image is resized, the new image is saved with a file name like the original but with characters appended. As an example, an image resized from myimage.png
may be saved as myimage_resized.png
.
The characters for appending to resized image file names (_resized
in the above example) are specified by you. As with maximum width and height, the file name characters may optionally be specified with the script URL.
Customizing and Uploading the Script
The Bulk Image Resize PHP script is further below. It may be uploaded to your server as is or the defaults may be customized first.
Now, or when done customizing, upload the Bulk Image Resize script into a directory that will be only for resizing images. Name the script imagesResize.php
or other *.php
file name. The examples in this article assume imagesResize.php
is the file name.
As noted, customizing the defaults is optional. The current defaults are:
- Maximum width: 200
- Maximum height: 200
- File renaming characters: _resized
Each of those is addressed below the software source code.
<?php /* Bulk Image Resize (Resize all images in a Directory) Version 1.1 July 25, 2022 Version 1.0, August 28, 2019 Will Bontrager Software LLC https://www.willmaster.com/ */ /* Optional customization */ $Resize['max-width'] = 200; // Default number of pixels if not specified with software URL (max-width=123) $Resize['max-height'] = 200; // Default number of pixels if not specified with software URL (max-height=123) $Resize['namechars'] = '_resized'; // Default characters if not specified with software URL (namechars=xyz) /* End of customization */ if( isset($_GET['max-width']) ) { $Resize['max-width'] = $_GET['max-width']; } if( isset($_GET['max-height']) ) { $Resize['max-height'] = $_GET['max-height']; } if( isset($_GET['namechars']) ) { $Resize['namechars'] = $_GET['namechars']; } $Resize['files'] = array(); foreach(glob('*.jpeg') as $f) { $Resize['files'][] = $f; } foreach(glob('*.jpg') as $f) { $Resize['files'][] = $f; } foreach(glob('*.png') as $f) { $Resize['files'][] = $f; } foreach(glob('*.gif') as $f) { $Resize['files'][] = $f; } ResizeImagesWithinArray($Resize); echo 'OK'; exit; function ResizeImagesWithinArray($data) { global $G, $Resize; $arr = array(); $arr['width'] = $data['max-width']; $arr['height'] = $data['max-height']; $count = count($data['files']); for( $i=0; $i<$count; $i++ ) //$data['files'] as $f ); { $filename=__DIR__.'/' . $data['files'][$i]; $ext = imprintGetFileNameExtension($filename); $fname = preg_replace('/\.[^\.]+$/','',$filename); $arr['filename'] = $filename; $arr['ext'] = $ext; $arr['fname'] = $fname; $arr['source'] = "$fname.$ext"; $arr['dest'] = "$fname{$Resize['namechars']}.$ext"; ResizeTheImage($arr); } } # function ResizeImagesWithinArray() function ResizeTheImage($arr) { $src = trim($arr['source']); $dest = $arr['dest']; $destWidth = $arr['width']; $destHeight = $arr['height']; $arr = array(); $th = getimagesize($src); $srcWidth = $th[0]; $srcHeight = $th[1]; $ta = explode('/',$th['mime']); if( count($ta)>1 ) { $type = array_pop($ta); } else { $type = imprintGetFileNameExtension($src); } $type = strtolower($type); $th = array(); $ta = array(); $adjustment = min( ( $destWidth / $srcWidth ), ( $destHeight / $srcHeight ) ); $destWidth = number_format( $srcWidth * $adjustment ); $destHeight = number_format( $srcHeight * $adjustment ); if( $srcWidth <= $destWidth and $srcHeight <= $destHeight ) { return; } // Start new image. $newimg = imagecreatetruecolor($destWidth, $destHeight); switch($type) { case 'jpeg': case 'jpg' : $oldimg = imagecreatefromjpeg($src); break; case 'png' : $oldimg = imagecreatefrompng($src); break; case 'gif' : $oldimg = imagecreatefromgif($src); break; default : return "Error: Unsupported image type."; } // Handle any transparency in GIF or PNG. if($type == "gif" or $type == "png") { imagecolortransparent( $newimg, imagecolorallocatealpha($newimg, 0, 0, 0, 127) ); imagealphablending( $newimg, false ); imagesavealpha( $newimg, true ); } // Create image. imagecopyresampled($newimg, $oldimg, 0, 0, 0, 0, $destWidth, $destHeight, $srcWidth, $srcHeight); $outtype = $type; switch($outtype) { case 'jpeg': case 'jpg' : imagejpeg( $newimg, $dest, 100 ); break; case 'png' : imagepng( $newimg, $dest, 9 ); break; case 'gif' : imagegif( $newimg, $dest ); break; } return true; } # function ResizeTheImage() function imprintGetFileNameExtension($p) { $ta = explode('.',$p); $ext = array_pop($ta); return $ext; } # function imprintGetFileNameExtension() ?>
Optional customizations —
The defaults in the Bulk Image Resize source code may be customized. (See Using Bulk Image Resize further below for information about overriding the defaults.)
The maximum width default in the above source code is 200 (pixels): $Resize['max-width'] = 200;
The default width may be changed by changing the 200
value.
The maximum height default in the above source code is 200 (pixels): $Resize['max-height'] = 200;
The default height may be changed by changing the 200
value.
The default characters to append to resized image file names is _resized
: $Resize['namechars'] = '_resized';
The default characters may be changed by changing the _resized
value.
Those are the optional customizations, default values that the script will use when necessary. Bulk Image Resize can now be uploaded into the directory that will be only for resizing images.
Using Bulk Image Resize
When imagesResize.php
has been uploaded and there is at least one image file in that same directory, the script can be run.
Make a note of the URL of imagesResize.php
and type its URL into your browser's address bar. Example:
https://example.com/resizedir/imagesResize.php
When run, imagesResize.php
automatically resizes all *.png
, *.jpg
, *.jpeg
, and *.gif
images files in the directory that are larger than the maximum dimensions. Each resized file is saved as the original file name with specific characters appended.
To override the defaults specified in the Bulk Image Resize software source code, use URL parameters. Each of the defaults can be overriden.
Here is an example of the imagesResize.php
script URL with parameters.
https://example.com/resizedir/imagesResize.php?max-width=100&max-height=150&namechars=(100x150)
The max-width=100
parameter overrides the default with a maximum width of 100 pixels. Change 100
to the maximum width you prefer.
The max-height=150
parameter overrides the default with a maximum height of 150 pixels. Change 150
to your preference.
The namechars=(100x150)
parameter overrides the default with (100x150)
to be appended to the file name when saving the resized image. Change (100x150)
as appropriate for your implementation.
One or more of the above three may be specified in the imagesResize.php
URL parameter for resizing images.
Once the script is in the directory with images to resize, the work is very fast. Run the Bulk Image Resize with or without parameters appended to its URL and the software resizes all the images that have a height or width larger than the specified maximum.
(This article first appeared in Possibilities newsletter.)
Will Bontrager