기본 갤러리 게시판 세로 사진 업로드 오류 도와주세요
본문
가로 이미지는 잘올라갑니다.
세로 이미지를 올리면 아래 에러가 나옵니다.
Fatal error: Call to undefined function imagerotate() in /home1/hannongc/public_html/lib/thumbnail.lib.php on line 260
오류 나는부분의 소스인데 이부분을 지우면 오류는 나지않고 세로사진이 왼쪽으로 90도꺽여서 올라가긴합니다.
// 회전각도 있으면 이미지 회전
if($degree) {
$src = imagerotate($src, $degree, 0);
// 세로사진의 경우 가로, 세로 값 바꿈
if($degree == 90 || $degree == -90) {
$tmp = $size;
$size[0] = $tmp[1];
$size[1] = $tmp[0];
}
}
다른사이트들은 똑같은 소스로 정상적으로 세로사진이 올라가는데 무슨문제일까요?
답변 2
서버에 GD라이브러리가 설치가 안됐거나 버젼이 맞지 않는 듯합니다.
아래는 구글링으로 찾아본 자료입니다.
imagerotate 없을 때 사용가능하다고 하네요.
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,
저도 같은 에러가 발생했습니다. PHP 5.2 에 포함된 GD버전인데 세로 사진의 경우 Thumbnail 이 잘 생성되지 않았습니다. 그래서 인터넷 검색하여 링크하신 대체 함수를 추가했습니다. 그래도 에러가 났는데 살펴보니아래 부분을 주석처리까지 해야(실행되지 않게 해야) 제대로 작동했습니다.
if ($ignore_transparent == 0) {
imagefill($destimg, 0, 0, imagecolorallocatealpha($destimg, 255,255, 255, 127));
imagesavealpha($destimg, true);
}