PHP Fatal error: Call to undefined function imagerotate() debian
Столкнулся с проблемой отсутствие в сборке debian функции imagerotate().
Выкладываю пример решения данной проблемы на примере решения для Not Captcha
Открываем /wp-content/plugins/wp-notcaptcha/lib/notcaptcha.php
находим строку
в версии 1.2 находим
добавляем
Human test by Not Captcha
$angles = explode('|', $angles); |
< ?php /* * myWebNotCaptcha 1.2 * Created by WebJema 2009 * See notcaptcha_config.php for customizing * www.webjema.com */ require(dirname(__FILE__).'/notcaptcha_config.php'); if ($_SESSION['nc_session'] != session_id()) { die('session error'); } |
< ?php if(!function_exists("imagerotate")) { function imagerotate($srcImg, $angle, $bgcolor=0, $ignore_transparent = 0) { return imagerotateEquivalent($srcImg, $angle, $bgcolor, $ignore_transparent); } } /* Imagerotate replacement. ignore_transparent is work for png images Also, have some standard functions for 90, 180 and 270 degrees. Rotation is clockwise */ function imagerotateEquivalent($srcImg, $angle, $bgcolor, $ignore_transparent = 0) { function rotateX($x, $y, $theta){ return $x * cos($theta) - $y * sin($theta); } function rotateY($x, $y, $theta){ return $x * sin($theta) + $y * cos($theta); } $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 (rotateX(0, 0, 0-$theta), rotateX($srcw, 0, 0-$theta), rotateX(0, $srch, 0-$theta), 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 (rotateY(0, 0, 0-$theta), rotateY($srcw, 0, 0-$theta), rotateY(0, $srch, 0-$theta), 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(rotateX($x, $y, $theta)); $srcY = round(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; } ?> |
Неделю голову ломал, как же обойти функцию imagerotate() . Все работает, респект.
Спасибо, Slawka, большое! 🙂
Народ, она переварачивает картинку не в ту сторону, не на нужный угол..(
@Герман
А подробнее ?
Nice site ….)
Как решить проблему отсутствия функции imagerotate() на debian lenny не компилируя gd из исходников:
1. скачиваем расширение gd.so отсюда (скомпилировано под php5-gd_5.2.6.dfsg.1-1+lenny8_i386, тестировал на lenny10_386)
2. бэкапим файл usr\lib\php5\20060613+lfs\gd.so
3. заменяем usr\lib\php5\20060613+lfs\gd.so на файл скаченный в пункте 1
4. блокируем обновление gd при вызове apt-get upgrade:
echo «php5-gd hold» | dpkg —set-selections
(включить обратно: echo «php5-gd install» | dpkg —set-selections)
5. /etc/init.d/apache2 restart
6. недостающие функции должны работать, в том числе и imagerotate()
все «\» заменить на «/», долбаная винда 🙂