0

我使用 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');
    }
}
4

2 回答 2

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。

于 2014-06-27T09:35:14.530 回答
0

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

还可以尝试添加 content-transfer-encoding 和 content-length 标头:

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

我也没有看到您将实际内容添加到响应中:

$response->setContent($yourJpegContent);

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

于 2014-06-27T00:33:41.520 回答