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