I have a php script im currently using that creates thumbnails based on a max width and height. However, I'd like it to always create square images and crop the images when needed.
Here is what I'm using now:
function makeThumb( $filename, $type ) {
global $max_width, $max_height;
if ( $type == 'jpg' ) {
$src = imagecreatefromjpeg("blocks/img/gallery/" . $filename);
} else if ( $type == 'png' ) {
$src = imagecreatefrompng("blocks/img/gallery/" . $filename);
} else if ( $type == 'gif' ) {
$src = imagecreatefromgif("blocks/img/gallery/" . $filename);
}
if ( ($oldW = imagesx($src)) < ($oldH = imagesy($src)) ) {
$newW = $oldW * ($max_width / $oldH);
$newH = $max_height;
} else {
$newW = $max_width;
$newH = $oldH * ($max_height / $oldW);
}
$new = imagecreatetruecolor($newW, $newH);
imagecopyresampled($new, $src, 0, 0, 0, 0, $newW, $newH, $oldW, $oldH);
if ( $type == 'jpg' ) {
imagejpeg($new, 'blocks/img/gallery/thumbs/'.$filename);
} else if ( $type == 'png' ) {
imagepng($new, 'blocks/img/gallery/thumbs/'.$filename);
} else if ( $type == 'gif' ) {
imagegif($new, 'blocks/img/gallery/thumbs/'.$filename);
}
imagedestroy($new);
imagedestroy($src);
}
How would I alter this to accomplish what I want (Square thumbs)?
Thanks in advance.
function makeThumb( $filename , $thumbSize=100 ){
global $max_width, $max_height;
// Set Filenames
$srcFile = 'blocks/img/gallery/'.$filename;
$thumbFile = 'blocks/img/gallery/thumbs/'.$filename;
// Determine the File Type
$type = substr( $filename , strrpos( $filename , '.' )+1 );
// Create the Source Image
switch( $type ){
case 'jpg' :
case 'jpeg' :
$src = imagecreatefromjpeg( $srcFile ); break;
case 'png' :
$src = imagecreatefrompng( $srcFile ); break;
case 'gif' :
$src = imagecreatefromgif( $srcFile ); break;
}
// Determine the Image Dimensions
$oldW = imagesx( $src );
$oldH = imagesy( $src );
// Calculate the New Image Dimensions
$limiting_dim = 0;
if( $oldH > $oldW ){
// Portrait
$limiting_dim = $oldW;
}else{
// Landscape
$limiting_dim = $oldH;
}
// Create the New Image
$new = imagecreatetruecolor( $thumbSize , $thumbSize );
// Transcribe the Source Image into the New (Square) Image
imagecopyresampled( $new , $src , 0 , 0 , ($oldW-$limiting_dim )/2 , ( $oldH-$limiting_dim )/2 , $thumbSize , $thumbSize , $limiting_dim , $limiting_dim );
// Output the image to the file
switch( $type ){
case 'jpg' :
case 'jpeg' :
$src = imagejpeg( $new , $thumbFile ); break;
case 'png' :
$src = imagepng( $new , $thumbFile ); break;
case 'gif' :
$src = imagegif( $new , $thumbFile ); break;
}
// Free up the memory
imagedestroy( $new );
imagedestroy( $src );
}
Hat Tip to @Sam Wan for the adjusted solution. Sorry it took me so long to incorporate it into this answer.