I have a strange error here, I think.
Fatal error: Call to undefined function imagerotate() in /var/www/web/html/include/php/class/image.class.php on line 30
LINE 30:
$im = imagerotate( $this->res, $degrees, $bkg );
According to the PHP documentation, imagerotate()
should be a function since PHP 4 and I am using PHP 5.
Why does it not work? Other image functions, such as imagecreatefromjpeg()
and imagejpeg()
work fine.
GD info from phpinfo():
GD Support enabled
GD Version 2.0 or higher
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.3.7
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
In the page you linked to it clearly says
Note: This function is only available if PHP is compiled with the bundled version of the GD library.
And one of the comments say
This function apparently contains a memory leak. Because of this, it was kept out of the GD library that comes with Ubuntu (and I assume other OS'es, too).
So, If you are running Ubuntu and wonder why you get "Call to undefined function imagerotate()" even though you seemingly have the correct GD lib installed, this is why. Use the alternative supplied by beau at dragonflydevelopment dot com instead. It works flawlessly (for angles in steps of 90 degrees).
On a side-note, some other GD image functions (unfortunately, the more interesting ones) suffer from the same problem and are kept out of the Ubuntu distribution as well.
For a possible solution look here
Code copied from http://www.php.net/manual/en/function.imagerotate.php#93151 and revised
if (!function_exists('imagerotate')) {
/*
Imagerotate replacement. ignore_transparent is work for png images
Also, have some standard functions for 90, 180 and 270 degrees.
Rotation is clockwise
*/
function imagerotate_rotateX($x, $y, $theta) {
return $x * cos($theta) - $y * sin($theta);
}
function imagerotate_rotateY($x, $y, $theta) {
return $x * sin($theta) + $y * cos($theta);
}
function imagerotate($srcImg, $angle, $bgcolor = 0, $ignore_transparent = 0) {
$srcw = imagesx($srcImg);
$srch = imagesy($srcImg);
//Normalize angle
$angle %= 360;
//Set rotate to clockwise
$angle = -$angle;
if ($angle == 0) {
if ($ignore_transparent == 0) {
imagesavealpha($srcImg, true);
}
return $srcImg;
}
// Convert the angle to radians
$theta = deg2rad($angle);
//Standart case of rotate
if ((abs($angle) == 90) || (abs($angle) == 270)) {
$width = $srch;
$height = $srcw;
if (($angle == 90) || ($angle == -270)) {
$minX = 0;
$maxX = $width;
$minY = -$height+1;
$maxY = 1;
} else if (($angle == -90) || ($angle == 270)) {
$minX = -$width+1;
$maxX = 1;
$minY = 0;
$maxY = $height;
}
} else if (abs($angle) === 180) {
$width = $srcw;
$height = $srch;
$minX = -$width+1;
$maxX = 1;
$minY = -$height+1;
$maxY = 1;
} else {
// Calculate the width of the destination image.
$temp = array(
imagerotate_rotateX(0, 0, 0 - $theta),
imagerotate_rotateX($srcw, 0, 0 - $theta),
imagerotate_rotateX(0, $srch, 0 - $theta),
imagerotate_rotateX($srcw, $srch, 0 - $theta)
);
$minX = floor(min($temp));
$maxX = ceil(max($temp));
$width = $maxX - $minX;
// Calculate the height of the destination image.
$temp = array(
imagerotate_rotateY(0, 0, 0 - $theta),
imagerotate_rotateY($srcw, 0, 0 - $theta),
imagerotate_rotateY(0, $srch, 0 - $theta),
imagerotate_rotateY($srcw, $srch, 0 - $theta)
);
$minY = floor(min($temp));
$maxY = ceil(max($temp));
$height = $maxY - $minY;
}
$destimg = imagecreatetruecolor($width, $height);
if ($ignore_transparent == 0) {
imagefill($destimg, 0, 0, imagecolorallocatealpha($destimg, 255,255, 255, 127));
imagesavealpha($destimg, true);
}
// sets all pixels in the new image
for ($x = $minX; $x < $maxX; $x++) {
for ($y = $minY; $y < $maxY; $y++) {
// fetch corresponding pixel from the source image
$srcX = round(imagerotate_rotateX($x, $y, $theta));
$srcY = round(imagerotate_rotateY($x, $y, $theta));
if ($srcX >= 0 && $srcX < $srcw && $srcY >= 0 && $srcY < $srch) {
$color = imagecolorat($srcImg, $srcX, $srcY);
} else {
$color = $bgcolor;
}
imagesetpixel($destimg, $x-$minX, $y-$minY, $color);
}
}
return $destimg;
}
}
Are you running Ubuntu by any chance? Then this might explain why you get the error message.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With