Calling the undefined function imagerotate ()

I have a strange mistake here.

Fatal error: calling the 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 PHP documentation , imagerotate() should be a function with PHP 4, and I am using PHP 5.

Why is this not working? Other image functions like imagecreatefromjpeg() and imagejpeg() work fine.

GD info from phpinfo ():

GD support included
GD version 2.0 or higher
FreeType Support
FreeType Linkage with freetype
FreeType Version 2.3.7
T1Lib support included
GIF reader support included
GIF Support
Jpg support included
PNG support included
WBMP support enabled

+4
source share
3 answers

The page you link to clearly states

Note. This function is only available if PHP is compiled in the bundled version of the GD library.

And one of the comments says

This feature apparently contains a memory leak. Because of this, from the GD library that comes with Ubuntu (and I guess other OSs, too).

So, if you use Ubuntu and wonder why you get the β€œCall to undefined function imagerotate ()”, although you seem to have the correct GD lib installed, that’s why. Use the alternative provided by beau at dragonflydevelopment dot com instead. It works flawlessly (for steps of 90 degrees).

On a side note, some other image of GD functions (unfortunately the more interesting) suffer from the same problem and are not allowed from Ubuntu distribution.

For a possible solution, look here.

Code copied from http://www.php.net/manual/en/function.imagerotate.php#93151 and modified

 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; } } 
+8
source

Are you starting Ubuntu by accident? Then this can explain why you get the error message.

+2
source

First add to the script a if:

 if(!extension_loaded('gd')) throw new Exception('GD extenstion not installed'); 

If his work checks your GD information:

 echo '<pre>'; var_dump(gd_info()); 

Also check if jpeg is supported (it should be in dg_info results).

If everything is in order and it still does not work, contact your hosting service.

(The error says that you are using a non-existing function, cna you are using some kind of code, where do you use it?)

+1
source

Source: https://habr.com/ru/post/1344934/


All Articles