2010-08-02 6 views
14

이 코드가 작동하지 않는 이유는 무엇입니까?오류가있어서 이미지를 표시 할 수 없습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 

     <title></title> 
    </head> 
    <body> 
     <?php 
     header('Content-type: image/png'); 
     $myImage = imagecreate(200, 100); 
     $myGray = imagecolorallocate($myImage, 204, 204, 204); 
     $myBlack = imagecolorallocate($myImage, 0, 0, 0); 
     imageline($myImage, 15, 35, 120, 60, $myBlack); 

     imagepng($myImage); 
     imagedestroy($myImage); 
     ?> 
    </body> 
</html> 

항상 오류 The image cannot be displayed because it contains errors.이 표시됩니다. 나는 이미 php_gd2.dll을 활성화했고 php.ini의 memory_limit도 128M입니다. header('Content-type: image/png');을 제거하면 오류가 발생하지 않지만 이미지가 표시되지 않습니다. 내가 보는 모든이있다 : -

£ Àx�§” Nf*k²Ã)Ãø�§”•5}À)ÅS†ÚšpJUà”a§²¦œ2ÔŽw<špJ‚Q0 †;�� uTBúŸ����IEND®B

‰PNG ��� IHDR���È���d���ùHíH���PLTEÌÌÌ���Ó33d���MIDATH‰c,`

+1

특히 5.4 이후로 PHP 오류보고를 조심하십시오. 오류는 화면에 인쇄되지 않지만 이미지에는 오류가 발생합니다. 'error_reporting (0); 시도하십시오.' 코드 상단에서 나를 위해 일했습니다. – Chaoley

답변

23

당신은 헤더 전에 아무것도 출력하지해야합니다(). <?php으로 문서를 시작한 다음 이미지를 표시하는 코드를 입력하기 만하면됩니다. html 태그를 건너 뜁니다. header() 앞에 하나의 blankline을 쓰지 마십시오.

이미지를 HTML 문서에 표시하려면 두 파일에서 이미지를 표시해야합니다. 하나는 헤더를 포함한 PHP 코드 만 포함하는 image.php를 호출하는 것입니다. show.php 또는 show.html이라고하는 두 번째 파일에는 <img src="image.php" alt="Your generated image" />을 비롯하여 원하는 html 코드가 포함되어 있습니다.

+0

죄송합니다. 이해하지 못했습니다. 내가 어떤 변화를해야합니까? header()는 이미 PHP의 첫 번째 줄입니다. 만약 당신이'html','head' 등을 삭제해야한다는 것을 의미한다면 나는 그것을 시도했다. 만약 내가 그렇게한다면 나는 여전히'이미지에 오류가있다 '라는 메시지를 보게된다. – TCM

+0

고마워. – TCM

+0

@Nitesh 두 개의 파일이 필요 없다. [인라인 솔루션에 대한 내 대답을보십시오] (http://stackoverflow.com/questions/3385982/the-image-cannot-be-displayed-because-it-contains-errors/3386050#3386050). 두 파일을 갖는 것이 더 현명하고 신뢰할 수 있습니다. – Gordon

2

이것 만 있으면 충분합니다. 자신의 파일처럼 보이게해야하기 때문에 다른 것을 인쇄 할 수 없습니다. 이 image.php를 호출하고 출력 할 이미지를 정의하는 변수를 전달할 수 있습니다.

<?php 
    header('Content-type: image/png'); 
    $myImage = imagecreate(200, 100); 
    $myGray = imagecolorallocate($myImage, 204, 204, 204); 
    $myBlack = imagecolorallocate($myImage, 0, 0, 0); 
    imageline($myImage, 15, 35, 120, 60, $myBlack); 

    imagepng($myImage); 
    imagedestroy($myImage); 
?> 
3

당신은 출력 이미지해야한다. 태그 묶음을 출력하고 있습니다. 특히

<

DOCTYPE HTML PUBLIC! "- // W3C // DTD HTML 4.01 // 과도 EN"> 다음

<title></title> 
</head> 
<body> 
바이너리로 이미지. 이것을보고 싶다면 wget 페이지를 서버에서 열고 편집기에서 열어보십시오. 코드는 <?php부터 시작해야합니다.

헤더를 제거하면 이미지라는 클라이언트에 대한 알림이 제거되므로 텍스트로 인쇄 해보기가 시도됩니다.

9

출력을 base64 인코딩하는 경우 이미지를 Data URI scheme과 함께 직접 사용할 수 있습니다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
    <head> 

     <title></title> 
    </head> 
    <body> 
     <?php 

     $myImage = imagecreate(200, 100); 
     $myGray = imagecolorallocate($myImage, 204, 204, 204); 
     $myBlack = imagecolorallocate($myImage, 0, 0, 0); 
     imageline($myImage, 15, 35, 120, 60, $myBlack); 
     ob_start(); 
     imagepng($myImage); 
     printf('<img src="data:image/png;base64,%s"/>', 
       base64_encode(ob_get_clean())); 

     imagedestroy($myImage); 
     ?> 
    </body> 
</html> 

모든 브라우저에서 데이터 URI를 지원하지는 않습니다 (추정치).

+1

+1. 나머지와 다른 대답. –

+0

흥미로운 변종. 웹 브라우저가이 이미지를 캐시하는 방식을 제어 할 수 있습니까? – Johan

+1

@Johan 이미지가이 방법으로 외부 리소스가 아닙니다. 만료 헤더 등은 없습니다. 게재 된 페이지의 텍스트입니다. 페이지에 적용되는 모든 캐싱은 이미지에 적용됩니다. – Gordon

2

나는 PHP 스크립트를 자체 파일 (image.php)로 분리하여 잘 작동했다 : 검정색 경사 선이있는 회색 직사각형이있다. 문제는이 파일을 HTML 파일에 삽입하는 중입니다.

당신은 (내가 그랬던 것처럼, 그것은 image.php 또는 필요에 뭔가 더 설명을 전화) 후 다음과 같이 HTML 파일을 생성 자체, 별도의 파일에서 PHP가 필요합니다

<html> 
    <head> 
    <title>Document Title</title> 
    </head> 
    <body> 
    <img src="image.php" alt="" /> 
    </body> 
</html> 

당신은 가야 당신의 원하는 출력.파일이 경우이 오류가 반환하지만 -

+0

음, 반드시 그 파일에있는 것은 아닙니다. HTML과 PNG를 섞어서는 안됩니다. –

2

PHP와의 그래프 API의 출력에 페이스 북 프로필 사진의 JPG를 시도하는 동안은, 나는 PHP 파일이 UTF-8 인코딩으로 저장되는 경우 것으로 나타났습니다 ANSI 인코딩 - 으로 저장 한 다음 제대로 작동합니다. 이 문제가있는 경우

+0

감사합니다 Yuval, 모두 내 문제를 해결했습니다. PHP 파일의 인코딩! – Alexar

2

의 스크립트의 시작 내가 몇 시간 전에 이것을 실현 소요되는 PHP 태그

> <?php 

사이에 공백 문자를 삭제하려고합니다. 그리고 이제는 괜찮습니다. 이는 파일의 모든 문자가 png 형식을 변경하기 때문에 발생합니다. 이것은 나를 위해 큰 역할을했습니다.

0

나는 동일한 문제가 있었으며 해결책은 UTF-8에서 ansi 또는 viceversa로 코드의 charset을 변경하는 것이 었습니다. 서버가 UTF-8로 설정되어 있고 코드가 ansi에 있으면이 코드는 작동하지 않으며 코드가 ansi이고 서버가 UTF-8로 구성되어 있지 않습니다. 당신이 헤더 전에에서 모든 텍스트를 제거한 생각하더라도

3

()는 Byte Order Marker

이것은 당신의 편집기에서 당신에게 보이지 않는 수 있지만 브라우저가 그것을보고하고 이미지를 생각합니다를 포함 할 수 있습니다 귀하의 PHP 파일 부패하다. BOM을 제거하려면 편집기에 적절한 단계를 수행해야합니다.

0

Filezilla을 사용하여 웹 페이지를 업로드하는 경우 전송 유형을 'Auto/Binary'으로 선택했는지 확인하십시오.

전송 -> 전송 유형 -> 자동/이진.

관련 문제