PHP Imagick图像在下载时被截断,但只有部分时间

时间:2013-06-18 00:39:44

标签: php image-processing download imagick

当我使用PHP Imagick()调整大小并提供要下载的图像时,生成的图像通常会被截断。

当发生这种情况时,我无法诊断,但它发生了很多,这是一个问题。在这段代码中,$ file是一个更大的图像文件,我想订购一个更小的下载。

    if (file_exists($file)) {

    $image = new Imagick();
    $image->setResolution(150,150);
    $image->readImage($file);
    $image->resizeImage(1275,0,Imagick::FILTER_LANCZOS,1);
    $image->setImageCompression(Imagick::COMPRESSION_JPEG);

    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=download.'.$extension);
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    echo $image;
    exit;

    }

正在发生的事情是,有些时候文件正​​确下载,有时图像被截断 - 只有图像的前30%看起来正确,其余的只是空白。所以文件尺寸是正确的,但图像数据只能使它成为中途。

可能导致问题的原因 - 但仍然不会始终如一 - 是我使用PDF,JPEG和PNG这样做,并将它们输出为原始扩展名。

有什么建议吗?

编辑:想出来,见下文。谢谢!

1 个答案:

答案 0 :(得分:0)

我是个白痴---原来我拿的是$ file的'Content-Length',而不是$ image。我刚刚将$ file更改为$ image,它运行正常。内容长度需要正确,否则会截断!

没关系!