1

当我使用 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 进行此操作,并将它们作为原始扩展名输出。

有什么建议么?

编辑:想通了,见下文。谢谢!

4

1 回答 1

0

我是个白痴——原来我正在获取 $file 的“Content-Length”,而不是 $image。我只是将 $file 更改为 $image 并且它工作正常。Content-Length 需要正确,否则会被截断!

没关系!

于 2013-06-18T00:40:47.550 回答