返回动态图像zf2

时间:2014-06-26 18:15:23

标签: image zend-framework2 http-headers gd2

我使用zend框架2并尝试返回使用gd2库jpeg图像创建的。但它不起作用。你能看看我的代码是什么问题吗?我的代码通常使用普通的php运行,但是在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');
    }
}

2 个答案:

答案 0 :(得分:2)

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。

答案 1 :(得分:0)

您将Content-Type标头设置为' image / png'而不是' image / jpeg'。

还尝试添加内容传输编码和内容长度标题:

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

我也没有看到你将实际内容添加到回复中:

$response->setContent($yourJpegContent);

其中$ yourJpegContent包含二进制图像数据。