2012-10-09 2 views
1

나는 내 자신의 서명 생성기에서 일하고있다. 머리글을 수정하지 않고 즉석에서 생성 된 이미지를 표시하는 방법? 내 사이트 (WordPress 기반)가 이미 헤더를 전송했기 때문에이를 알고 있어야하며 수정할 수 없습니다. 물론 테마를 수정할 수는 있지만 PHP로 시작한 것입니다. 헤더를 수정하면 모든 것이 (almost working script)으로 작동하지만 WordPress에서 열려고 할 때 이미지가 생성되지 않습니다. 두 번째 질문 : 생성 된 모든 확장을 포럼에 표시하는 방법 (예 :이 경우) : png? 생성 된 이미지를 저장하고 싶지는 않지만 이미지를 저장해야하는 경우 삭제해야합니다.PHP GD2 머리글을 수정하지 않고 즉석에서 생성 된 이미지를 표시하는 방법은 무엇입니까?

<?php 
if(! empty($_GET['nick'])){ 
    //default 
    $nick = $_GET['nick']; 
    if(empty($_GET['server'])) 
     $server = 'eu'; 
     else $server = $_GET['server']; 
    if(empty($_GET['font'])) 
     $font = 'calibri'; 
     else $font = $_GET['font']; 
    //generacja 
    $szerokosc = 350; 
    $wysokosc = 19; 
    $rozmiar = 13; 
    $ob = imagecreatetruecolor($szerokosc, $wysokosc); 
    $czarny = imagecolorallocate($ob, 0, 0, 0); 
    $bialy = imagecolorallocate($ob, 255, 255, 255); 
    putenv('GDFONTPATH=/home/p221366/public_html/snippets/fonts'); 
    imagettftext($ob, $rozmiar, 0, ($szerokosc/2), (($wysokosc-$rozmiar)/2)+$rozmiar, $bialy, $font, $nick.' '.$server); 
    Header('Content-type: image/png'); 
    imagepng($ob/*, $local*/); 
    imagedestroy($ob); 
} else {//bez arg 
    if (isset($_GET['nick'])) 
     echo '<p color=#ff0000>Invalid nickname!</p>'; 
    echo '<form method=get> 
     <table align="center" border=0> 
      <tr> 
       <td bgcolor=#aaaaaa align="right">Nick</td> 
       <td bgcolor=#cccccc align="center"><input type="text" name="nick" size="15" /></td> 
      </tr> 
      <tr> 
       <td bgcolor=#aaaaaa align="right">Server</td> 
       <td bgcolor=#cccccc align="center"> 
        <select name="server"> 
         <option value="eu">European</option> 
         <option value="ru">Russian</option> 
         <option value="com">American</option> 
        </select> 
       </td> 
      </tr> 
      <tr> 
       <td bgcolor=#aaaaaa align="right">Font</td> 
       <td bgcolor=#cccccc align="center"> 
        <select name="font"> 
         <option value="arial">Arial</option> 
         <option value="calibri">Calibri</option> 
         <option value="consola">Consolas</option> 
         <option value="courier">Courier New</option> 
         <option value="segoe">Segoe Script</option> 
         <option value="verdana">Verdana</option> 
        </select> 
       </td> 
      </tr> 
      <tr> 
       <td colspan="2" align="center"><input type="submit" value="Submit" /></td> 
      </tr> 
     </table> 
    </form>'; 
} 

?>

답변

0

이미지는 HTML 페이지에서 별도의 요청에 요청합니다. 즉석에서 이미지를 만들려면 HTML 페이지 자체를 보내는 것과 동일한 요청으로 이미지를 브라우저에 보낼 수 없습니다. 이미지를 생성 할 스크립트의 URL을 포함하는 적절한 태그를 생성해야합니다.

이미지 스크립트가 일종의로드를 생성하므로 이미지가 초 동적이어야하는 경우가 아니라면 영구 위치에 이미지를 저장하고 나중에 요청할 때이 파일을 읽는 것이 좋습니다.

"data :"의사 프로토콜을 사용하는 경우이 의사 프로토콜 내에 직접 이미지 데이터를 포함 할 수 있으며이 경우에만 다음 규칙을 포함 할 수 있습니다. HTML 내부의 이미지 데이터. 이미지 데이터는 일반적인 URL 규칙과 호환되어야하기 때문에 base64로 인코딩해야하므로 전송되는 데이터의 양이 크게 늘어납니다. 또한 이러한 URL은 브라우저에 아직 캐시 항목이없는 경우를 위해 모든 단일 이미지 태그에 포함되어야하기 때문에 브라우저 내부에서 캐시 될 수 없습니다.

기본적으로 브라우저의 지원이 필요한 것 외에 데이터 URL은 유명한 "투명 gif 픽셀"과 같은 매우 작은 이미지에만 사용해야합니다. 별도의 이미지 요청에 HTTP 오버 헤드를 추가하면 이미지가 43 바이트가되므로 데이터는이 경우 엄청납니다 (요청 당 약 1kb).