PDF 转 JPG 影像页面选择

Ran*_*ash 2 php pdf imagemagick image-processing imagick

关于如何为命令行执行此操作的大量答案

convert /path/to/file/file.pdf[3] output.jpg
Run Code Online (Sandbox Code Playgroud)

很好...但是如果我在内存处理中使用,我会用 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;
Run Code Online (Sandbox Code Playgroud)

这将创建一个 jpeg,但始终返回 PDF 的最后一页。我希望能够选择要转换哪一个。不保存临时文件和使用命令行(exec('convert /path/to/file/file.pdf[3] output.jpg'))语法是否可行?

让我补充一下,我试过

    $im->readimageblob($buf[2]);
Run Code Online (Sandbox Code Playgroud)

它没有用:)

小智 5

对于仍在寻找从 blob 读取特定页码的解决方案的人,请检查此问题使用 PHP 和 ImageMagick 创建由 PDF 中的图像填充的数组

$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();
Run Code Online (Sandbox Code Playgroud)