Create thumbnail with PHP (1)

PHP can be used to create and manipulate image files in a variety of different image formats. This post shows how to create thumbnail image in the same directory as the original image. Instead of GD library, I used utilities from ImageMagick suite of tools so your PHP shouldn’t have a GD module installed. convert with “-channel a” option will save transparency of the PNG and GIF images.

If you are looking for GD version of PHP thumbnail function, please see Create thumbnail with PHP (2).

/**
 * function creates a thumbnail image in the same directory with the prefix 'tn'
 * thumb should fit to the defined box (second parameter)
 * only bigger images are processed, while smaller images are just copied
 * function preserves PNG and GIF transparency
 *
 * @param string  $image1_path - full path to the image
 * @param integer $box         - box dimension
 */
function create_thumb($image1_path, $box=200){
	// get image size
	$identify = shell_exec("identify $image1_path");
	// read image geometry
	preg_match('/(\d+)x(\d+)/', $identify, $matches);
	$g1      = $matches[0]; // image geometry
	$width1  = $matches[1]; // image width
	$height1 = $matches[2]; // image height

	// prepare thumb name in the same directory with prefix 'tn'
	$image2_path = dirname($image1_path) . '/tn_' .basename($image1_path);
	
	// make image smaller if doesn't fit to the box 
	if ($width1 > $box || $height1 > $box){
		// set the largest dimension
		$width2 = $height2 = $box;
		// calculate smaller thumb dimension (proportional)
		if ($width1 < $height1) $width2  = round(($box / $height1) * $width1);
		else                    $height2 = round(($box / $width1) * $height1);
		
		// set thumbnail geometry
		$g2 = $width2 .'x' .$height2;
		
		// save thumbnail image to the file
		system("convert -channel a -size $g1 $image1_path -resize $g2 $image2_path");
	}
	// else just copy the image
	else copy($image1_path, $image2_path);
}

I also wrote Resize images with PHP where you can read about resizing all JPG images inside a current directory. After saving images from my camera to the computer, I needed a tool to prepare images for the Web upload. With small command line PHP script, images are converted to the lower resolution and saved to the separate subdirectory.

Leave a Comment