当我使用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这样做,并将它们输出为原始扩展名。
有什么建议吗?
编辑:想出来,见下文。谢谢!
答案 0 :(得分:0)
我是个白痴---原来我拿的是$ file的'Content-Length',而不是$ image。我刚刚将$ file更改为$ image,它运行正常。内容长度需要正确,否则会截断!
没关系!