해결책
1. gd2 라이브러리를 열고 phpinfo를 통해 봅니다. BOM을 지우세요. 코드는 맨 윗줄부터 작성되기 때문에 코드에 문제가 발생할 수 있습니다.
2. 헤더 앞에 ob_clean() 문을 추가한 후 실행합니다.
메모
이미지를 생성할 때 header('Content-type: image/png'); 는 앞에 출력될 수 없습니다. 또는 다음을 추가하세요. ob_clean(); 출력을 사용하더라도 이 문장을 사용하여 출력 캐시를 지울 수 있습니다.
예를 해결
//위의 인증코드 높이와 너비문자수를 설정합니다. $img_w = 70; $img_h = 22; $폰트 = 5; $char_len = 5; //배열 병합, range() 함수는 범위 배열을 반환합니다. $char = array_merge ( 범위( 'a', 'z' ), 범위( 'A', 'Z' ), 범위( '1', '9' ) ); $rand_keys = array_rand ( $char, $char_len ); // 배열에서 지정된 수의 요소를 무작위로 가져와 키 값을 생성합니다. if ($char_len == 1) { //숫자가 하나만 있으면 array_rand()는 배열이 아닌 유형을 반환합니다. $rand_keys = 배열($rand_keys ); } shuffle($rand_keys); //사용할 필요가 없습니다. $코드 = ''; foreach($rand_keys를 $k로) { $코드 .= $char [$k]; } 세션_시작(); $_SESSION ['captcha'] = $코드; //선과 색상 추가 //새 이미지 생성 $img = imagecreatetruecolor( $img_w, $img_h ); //색상 할당 $bg_color = 이미지 색상 할당( $img, 0xcc, 0xcc, 0xcc ); //캔버스 배경색 이미지 채우기( $img, 0, 0, $bg_color ); //간섭선 for($i = 0; $i < 300; ++$i) { $color = imagecolorallocate ( $img, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) ); imagesetpixel( $img, mt_rand( 0, $img_w ), mt_rand( 0, $img_h ), $color ); } for($i = 0; $i <= 10; ++ $i) { //선 색상 설정 $color = imageColorAllocate ( $img, mt_rand ( 0, 255 ), mt_rand ( 0, 255 ), mt_rand ( 0, 255 ) ); //$img 이미지에 무작위로 직선을 그립니다. imageline( $img, mt_rand( 0, $img_w ), mt_rand( 0, $img_h ), mt_rand( 0, $img_w ), mt_rand( 0, $img_h ), $color ); //imagesetpixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color); } //프레임 추가 $ect_color = 이미지 색상 할당( $img, 0x90, 0x90, 0x90 ); 이미지 직사각형( $img, 0, 0, $img_w - 1, $img_h - 1, $ect_color ); $str_color = imagecolorallocate ( $img, mt_rand ( 0, 100 ), mt_rand ( 0, 100 ), mt_rand ( 0, 100 ) ); $font_w = 이미지폰트폭( $font ); $font_h = 이미지폰트높이( $font ); $str_len = $font_w * $char_len; 이미지 문자열( $img, $font, ($img_w - $str_len) / 2, ($img_h - $font_h) / 2, $code, $str_color );
위 내용은 PHP가 이미지를 생성할 수 없는 문제에 대한 해결책입니다. 모든 분들께 도움이 되기를 바랍니다.