【问题标题】:return dynamic image zf2返回动态图像 zf2
【发布时间】:2014-06-26 18:15:23
【问题描述】:

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

【问题讨论】:

  • 您是否禁用了您未显示的...代码中的布局和视图?
  • 是的,我试过了,但它不起作用:(
  • $response = $this->getResponse(); $response->getHeaders() ->addHeaderLine('Content-Type', 'image/jpeg'); $viewModel = 新的 ViewModel(); $viewModel->setTerminal(true);返回 $viewModel;

标签: image zend-framework2 http-headers gd2


【解决方案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。

【讨论】:

  • 它不起作用..我会用普通的 php 来做,而不是在 zf2 中
【解决方案2】:

您将 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 包含二进制图像数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多