2014-06-26 59 views
0

我使用zend框架2並嘗試返回一個創建與gd2庫jpeg圖像。但它不起作用。你能看看我的代碼有什麼問題嗎?我的代碼通常在普通的php中運行,但在zf2的問題?返回動態圖像zf2

class PictureController extends AbstractActionController 
{ 
    public function colorPaletteAction(){ 

     .... 
     .... 
     //canvas created at above. 

     imagejpeg($canvas); 
     imagedestroy($canvas); 
     $response = $this->getResponse(); 

     return $response->getHeaders()->addHeaderLine('Content-Type', 'image/jpeg'); 
    } 
} 
+0

是否禁用了未顯示的代碼中的佈局和視圖? –

+0

是的,我試過這個,但它doeesn't工作:( – Yargicx

+0

$ response = $ this-> getResponse(); $ response-> getHeaders() - > addHeaderLine('Content-Type','image/JPEG'); $視圖模型=新的視圖模型(); $ viewModel-> setTerminal(真); 回報$視圖模型; – Yargicx

回答

0

您將Content-Type標頭設置爲'image/png'而不是'image/jpeg'。

也嘗試添加的內容傳輸編碼和內容長度的頭:

$response->getHeaders()->addHeaderLine('Content-Transfer-Encoding', 'binary') 
         ->addHeaderLine('Content-Length', mb_strlen($yourJpegContent)); 

我還沒有看到你添加的實際內容的響應:

$response->setContent($yourJpegContent); 

其中$ yourJpegContent包含二進制圖像數據。

1

imagejpeg立即輸出您不想要的數據。您可以使用輸出緩衝區來捕獲這些數據,或者先將它寫入文件。輸出緩衝區可能比較容易:

public function colorPaletteAction() 
{ 
    // [create $canvas] 

    ob_start(); 
    imagejpeg($canvas); 
    $imageData = ob_get_contents(); 
    ob_end_clean(); 

    imagedestroy($canvas); 

    $response = $this->getResponse(); 

    $response->getHeaders()->addHeaderLine('Content-Type', 'image/jpeg'); 
    $response->setContent($imageData); 

    return $response; 
} 

如果這不起作用,暫時註釋掉Content-Type頭網上看到你在說什麼輸出。確保輸出中沒有任何錯誤或HTML。

+0

它不工作..我會用純PHP做不ZF2 – Yargicx