Index: sites/all/modules/brilliant_gallery/brilliant_gallery.module
===================================================================
--- sites/all/modules/brilliant_gallery/brilliant_gallery.module	(revision 912)
+++ sites/all/modules/brilliant_gallery/brilliant_gallery.module	(working copy)
@@ -189,6 +189,12 @@
     '#maxlength' => 4,
     '#description' => t("The maximum width of thumbnails in the table (height calculated automatically)."),
   );
+  $form['brilliant_gallery_crop'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Crop images'),
+    '#default_value' => variable_get('brilliant_gallery_crop', TRUE),
+    '#description' => t("If selected, all images thumbnails have the same square size."),
+  );
   $form['brilliant_gallery_bcgcolour'] = array(
     '#type' => 'colorpicker',
     '#title' => t('Table background colour'),
@@ -600,6 +606,7 @@
     #$showcaption = $captionyesornot;
     $showcaption = $captionyesnotext;
   }
+  $imagecrop=variable_get('brilliant_gallery_crop', TRUE);
   $padding = variable_get('brilliant_gallery_padding', 3);
   $overbrowser = variable_get('brilliant_gallery_overbrowser', 'lightbox');
   // Totally full resolution display would be impractical, so this is the maximum width of "full" resolution.
@@ -643,7 +650,7 @@
   #$result .= $absolpath;
 
   # Make an array with images in this folder, and their properties.
-  $temp              = load_dir_to_array($absolpath, $imagewidth, $fullresolutionmaxwidth, $brilliant_gallery_sort);
+  $temp              = load_dir_to_array($absolpath, $imagewidth, $fullresolutionmaxwidth, $brilliant_gallery_sort, $imagecrop);
   $retval_dimensions = $temp[0];
   $imagemaxh         = $temp[1];
   $maxpoct           = count($retval_dimensions);
@@ -721,6 +728,7 @@
       $imgh        = $retval_dimensions[$poct - 1]['imgh'];
       $imgwbig     = $retval_dimensions[$poct - 1]['imgwbig'];
       $imghbig     = $retval_dimensions[$poct - 1]['imghbig'];
+      $imgcrop     = $retval_dimensions[$poct - 1]['imgcrop'];
       #@$smallenough = $retval_dimensions[$poct - 1]['smallenough'];
       #$style_li = "float: left; list-style: none; background: #000; width: 44px; height: 33px; padding: 4px; text-align: center; margin: 0; border: none;";
       $style_li = "font-size:0; float: left; width: ". $imagewidth ."px; list-style: none; background: ". $bgcolour ."; height: ". $imagemaxh ."px; padding: ". $padding ."px; text-align: center; margin: 0px; border: none;";
@@ -785,7 +793,7 @@
       #$result .= '<img style="display: block;border:0" src="' . $modulepath .'/image.php?imgp=' . base64_encode( $absolpath . '/' . $retval[$poct-1] ) . '&imgw=' . $imgw . '&imgh=' . $imgh . '" />'; # width="' . $imgw . '"
       #$result .= '<img style="border: 0; margin:0px; padding:0px;" alt="" src="' . $modulepath .'/image.php?imgp=' . base64_encode( $absolpath . '/' . $retval[$poct-1] ) . '&amp;imgw=' . $imgw . '&amp;imgh=' . $imgh . '" />'; # width="' . $imgw . '"
       # width="' . $imgw . '"
-      $result .= '<img style="border: 0; margin:0px; padding:0px;" alt="" src="'. $modulepath .'/image.php?imgp='. base64_encode($absolpath .'/'. $retval[$poct - 1]) .'&imgw='. $imgw .'&imgh='. $imgh .'" />';
+      $result .= '<img style="border: 0; margin:0px; padding:0px;" alt="" src="'. $modulepath .'/image.php?imgp='. base64_encode($absolpath .'/'. $retval[$poct - 1]) .'&imgw='. $imgw .'&imgh='. $imgh . '&imgcrop='. $imgcrop.'" />';
       #$result .= '</a>';
       $result .= '</a>' . "\n";
     }
Index: sites/all/modules/brilliant_gallery/functions.inc
===================================================================
--- sites/all/modules/brilliant_gallery/functions.inc	(revision 912)
+++ sites/all/modules/brilliant_gallery/functions.inc	(working copy)
@@ -36,7 +36,7 @@
 }
 
 
-function load_dir_to_array($absolpath, $imagewidth, $fullresolutionmaxwidth, $brilliant_gallery_sort) {
+function load_dir_to_array($absolpath, $imagewidth, $fullresolutionmaxwidth, $brilliant_gallery_sort, $imagecrop) {
   # Load Directory Into Array
   $poct              = -1;
   $retval_dimensions = array();
@@ -51,6 +51,7 @@
     $poct += 1;
     #$retval[$poct] = $file;
     $retval_dimensions[$poct]['file'] = $file;
+    $retval_dimensions[$poct]['imgcrop'] = $imagecrop;
 
     # Is image horizontally or vertically oriented?
     $temp = getimagesize($absolpath .'/'. $file);
@@ -72,8 +73,8 @@
     }
     else {
       // This is a vertical image
-      $retval_dimensions[$poct]['imgw'] = round(($temp[0] / $temp[1]) * ($temp[0] / $temp[1]) * $imagewidth);
-      $retval_dimensions[$poct]['imgh'] = round(($temp[0] / $temp[1]) * $imagewidth);
+      $retval_dimensions[$poct]['imgw'] = round(($temp[0] / $temp[1]) * $imagewidth);
+      $retval_dimensions[$poct]['imgh'] = $imagewidth;;
 #      if ($temp[0] > $fullresolutionmaxwidth) {
         $retval_dimensions[$poct]['imgwbig'] = round(($temp[0] / $temp[1]) * ($temp[0] / $temp[1]) * $fullresolutionmaxwidth);
         $retval_dimensions[$poct]['imghbig'] = round(($temp[0] / $temp[1]) * $fullresolutionmaxwidth);
Index: sites/all/modules/brilliant_gallery/image.php
===================================================================
--- sites/all/modules/brilliant_gallery/image.php	(revision 912)
+++ sites/all/modules/brilliant_gallery/image.php	(working copy)
@@ -62,7 +62,7 @@
   if ($lastchanged === false or (time() - $lastchanged > ($bgcachexpire))) {
     #echo '. 1.... ';
     # Cache file does not exist or is too old.
-    $my_data = resizeimage($_GET['imgp'], $_GET['imgw'], $_GET['imgh']);
+    $my_data = resizeimage($_GET['imgp'], $_GET['imgw'], $_GET['imgh'], $_GET['imgcrop']);
     # Now put $my_data to cache!
     $fh = fopen($cachedfile, "w+");
     fwrite($fh, $my_data);
@@ -101,7 +101,7 @@
     else {
       // Do your expensive calculations here, and populate $my_data
       // with the correct stuff..
-      $my_data = resizeimage($_GET['imgp'], $_GET['imgw'], $_GET['imgh']);
+      $my_data = resizeimage($_GET['imgp'], $_GET['imgw'], $_GET['imgh'], $_GET['imgcrop']);
       #echo ' -2.... ' . $bgcachexpire . ' // ' . $my_data;
       # For some reason I could not use: mysql_escape_string($my_data)
       #cache_set($bgcacheid, 'cache', time() + $bgcachexpire, $my_data);
@@ -114,7 +114,7 @@
   return $my_data;
 }
 
-function resizeimage($imgp, $imgw, $imgh) {
+function resizeimage($imgp, $imgw, $imgh, $imgcrop) {
   $imagepath = base64_decode($imgp);
   #echo '.... ' . base64_decode( $imgp );
   #flush();die(' stop!');
@@ -147,8 +147,23 @@
   # Resize the image
   $src_h   = ImageSY($img);
   $src_w   = ImageSX($img);
-  $dst_img = imagecreatetruecolor($imgw, $imgh);
-  imagecopyresampled($dst_img, $img, 0, 0, 0, 0, $imgw, $imgh, $src_w, $src_h);
+  $dst_img = 0;
+  if ($imgcrop) {
+    if ($src_h>$src_w) {
+      // portrait
+      $dst_img = imagecreatetruecolor($imgh, $imgh);
+      imagecopyresampled($dst_img, $img, 0, 0, 0, ($src_h-$src_w)/2 , $imgh, $imgh, $src_w, $src_w);
+    }
+    else {
+      // landscape
+      $dst_img = imagecreatetruecolor($imgw, $imgw);
+      imagecopyresampled($dst_img, $img, 0, 0, ($src_w-$src_h)/2, 0 , $imgw, $imgw, $src_h, $src_h);
+    }
+  }
+  else {
+    $dst_img = imagecreatetruecolor($imgw, $imgh);
+    imagecopyresampled($dst_img, $img, 0, 0, 0, 0, $imgw, $imgh, $src_w, $src_h);
+  }
   $img = $dst_img;
   imageinterlace($img, 1);
   imagecolortransparent($img);
