Recap:

Using imagerotate within PHP 4.3.9 - PHP 5.2.0 for both XP and Linux,
all using GD2

If you rotate an image 180 degrees, all is fine

If you rotate an image > 0 degrees and < 180 degrees, or > 180 degrees
and < 360 degrees, while the image will rotate, its dimensions are
somehow not refactored and as a result you get a rather annoying black
bar in the newly-rotated image, along with part of your image being
cropped off.

I learned about a possible workaround with ImageMagick's convert
command, but has anyone found a better solution (other than using XP's
built-in image rotation routines)?

Here is a visual example of what I mean.

Here is my original image:

http://valsignalandet.com/images/testshot.jpg

After I do this:

 

if (!function_exists('imagerecreatetruecolor')) { 
/** 
 * Recreate an existing image as a true color image {@link http://us2.php.net/manual/en/function.imagerotate.php#62530 See notes in imagerotate() for more information} 
 * 
 * @access public 
 * @param resource $image (reference) 
 * @return resource $image 
 */ 
 function &imagerecreatetruecolor(&$image) { 
  if (!imageistruecolor($image) && function_exists('imagecreatetruecolor')) { 
   list($width, $height) = array(@imagesx($image), @imagesy($image)); 
   $tempImage = @imagecreatetruecolor($width, $height); 
   @imagecopy($tempImage, $image, 0, 0, 0, 0, $width, $height); 
   $image = $tempImage; 
  } 
  return $image; 
 } 
} 


/*------------------------------------------------------------------------ 
--------------------------------------------------------------------------- 
Block to perform actions based upon checks. If you are to add text you 
will do a "imagefttext" function call; 
if you are to add a border you will instantiate an ImageBorderGenerator 
class object; if you are to grayscale the 
image you are to use the "imagecopymergegray" command ** and not 
imagecopyresampled ** 
-------------------------------------------------------------------------- 
---------------------------------------------------------------------------*/ 
// NOTE THAT NEGATIVE NUMBERS GO CLOCKWISE IN imagerotate(), I PREFER  NEGATIVE GO COUNTERCLOCKWISE AND POSITIVE GO CLOCKWISE 
if ($this->isSuccessful && $image && isset($angle) && is_numeric($angle)) 
 $image = @imagerotate(imagerecreatetruecolor($image), -1 * $angle, 0); // ROTATE IMAGE 

Here is your resulting image:

http://valsignalandet.com/images/testshot2.jpg

That might make it a bit more clear as far as what I mean by the "black
bar".

Phil

    GOT IT!!

    
    if (!function_exists('imagerecreatetruecolor')) {
     /**
      * Recreate an existing image as a true color image {@link http://us2.php.net/manual/en/function.imagerotate.php#62530 See notes in imagerotate() for more information}
      *
      * @access public
      * @param resource $image (reference)
      * @param boolean $willRotate (default false)
      * @param int $angle (default 0)
      * @return resource $image
      */
     function &imagerecreatetruecolor(&$image, $willRotate = false, $angle = 0) {
    	if (!imageistruecolor($image) && function_exists('imagecreatetruecolor')) {
             if ($willRotate && (($angle > 0 && $angle < 180) || ($angle > 180 && $angle < 360))) {
     	  list($width, $height) = array(@imagesy($image), @imagesx($image));
    	 } else {
    	  list($width, $height) = array(@imagesx($image), @imagesy($image));
    	 }
             $tempImage = @imagecreatetruecolor($width, $height);
             @imagecopy($tempImage, $image, 0, 0, 0, 0, $width, $height);
             $image = $tempImage;
            }
    	return $image;
     }
    }
    
    // NOTE THAT NEGATIVE NUMBERS GO CLOCKWISE IN imagerotate(), I PREFER NEGATIVE GO COUNTERCLOCKWISE AND POSITIVE GO CLOCKWISE
    		if ($this->isSuccessful && $image && isset($angle) && is_numeric($angle)) $newImage = $image = @imagerotate(imagerecreatetruecolor($image, 'willRotate', $angle), -1 * $angle, 0);	// ROTATE IMAGE
    
    
      Write a Reply...