大量关于如何在命令行中执行此操作的答案
convert /path/to/file/file.pdf[3] output.jpg很好..。但是如果我在内存处理中使用,我正在用PDFlib生成PDF,然后输出它的缓冲区到一个函数,我想要生成所选页面的jpg预览。多么?我的代码:
[...]
$buf = $pdf->get_buffer();
//$buff is just a PDF stored in a string now.
$im = new Imagick();
$im->readimageblob($buf);
$im->setImageFormat("jpg");
$im->setimagecompressionquality(60);
$len = strlen($im);
header("Content-type: image/jpeg");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=test.jpg");
echo $im;这将创建一个jpeg,但始终返回PDF的最后一页。我希望能够选择哪一个将被转换。在不保存临时文件和使用命令行(exec('convert /path/to/file/file.pdf[3] output.jpg'))语法的情况下可行吗?
让我补充一句,我试过
$im->readimageblob($buf[2]);但它不起作用:)
发布于 2012-06-27 20:30:59
不幸的是,这不是一个好消息,但我可以肯定地说,在撰写本文时,ImageMagick (和PHP库)不支持您试图使用的页面表示法。(对于未来的人来说:我正在检查php-imagick-3.0.1和imagemagick-6.6.0.4)。
我正在尝试做与您完全相同的事情,我刚刚花了几个小时在源代码中搜索,试图弄清楚它是做什么的,以及它是如何获得页面的,它看起来根本不会在从流中读取时使用它(即,.readBlob()调用)。
因此,我将把它放在一个临时文件中,并从那里读取它。不是很优雅,但它会工作的。
发布于 2014-03-27 05:46:01
对于那些还在寻找从blob中读取特定页码的解决方案的人,请查看此问题Creating array populated by images from a PDF using PHP and ImageMagick
$img_array = array();
$im = new imagick();
$im->setResolution(150,150);
$im->readImageBlob($pdf_in);
$num_pages = $im->getNumberImages();
for($i = 0;$i < $num_pages; $i++)
{
$im->setIteratorIndex($i);
$im->setImageFormat('jpeg');
$img_array[$i] = $im->getImageBlob();
}
$im->destroy();发布于 2018-05-26 12:05:50
我将PDF二进制文件从亚马逊S3加载到内存中,然后使用setIteratorIndex()选择我想要的特定页面,然后使用getImage()
function get_image_from_pdf($pdf_bytes, $page_num){
$im = new \Imagick();
$im->setResolution(150, 150);
$im->readImageBlob($pdf_bytes);
$im->setIteratorIndex($page_num);
$im = $im->getImage();
$im->setImageFormat('png');
return $im->getImageBlob();
}https://stackoverflow.com/questions/11114747
复制相似问题