当我使用 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 进行此操作,并将它们作为原始扩展名输出。
有什么建议么?
编辑:想通了,见下文。谢谢!