3

我试图制作托管在另一台服务器上的 pdf 文件的缩略图。我目前的代码是:

<?php
$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf");
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>

问题是代码只为pdf文件的最后一页生成缩略图。我怎样才能只为第一页制作缩略图?我试图在 imagick 行添加 [0]。

$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf[0]");

但它没有用。它仅适用于本地 pdf 文件,即:

$im = new imagick("my-pdf-file.pdf[0]");

请帮我解决这个问题..谢谢..

4

3 回答 3

5

您需要将活动图像重置为第一页。这可以通过Imagick::setIteratorIndex来完成。

<?php
$im = new imagick("http://www.d3publisher.us/Walkthroughs/Naruto_NC_3_DS.pdf");
$im->setIteratorIndex(0);
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
echo $im;
?>
于 2013-09-06T13:37:17.980 回答
1

尝试...

$im->setImageIndex(0); //this will return 1th page of the pdf file
$im->setImageFormat('jpg');
于 2015-01-09T19:03:21.210 回答
0

“这可以通过 Imagick::setIteratorIndex 来完成……”

..或不。根本没有效果。将其设置为一个会导致崩溃,将其设置为 0 将获取最后一页..

function make_thumbnail($filename)
    {

    try
        {
        $imagick= new Imagick($filename);
        }
    catch(ImagickException $e)
        {
        // failed to make a thimbynail. what now?
        // load up our trusty truetype font png instead?
        $imagick->destroy();
        return "0"; // shove any rubbish in the db - it will just say no image available when asked.
        }
    $imagick->setIteratorIndex(0);// rewind to first page or image of a multi series
    $imagick->setImageFormat("png"); // turn it into a png
    $imagick = $imagick->flattenImages(); // remove any transparency

    $imagick->scaleImage(300,0);  //resize...to less than 300px wide
    $d = $imagick->getImageGeometry();
        $h = $d['height'];
        if($h > 300) 
        $imagick->scaleImage(0,300); 
    $imagick->setImageCompression(\Imagick::COMPRESSION_UNDEFINED);
    $imagick->setImageCompressionQuality(0);
    $imagick->setIteratorIndex(0);
    $a = $imagick->getImageBlob(); // output as bytestream
    $imagick->destroy();
    return $a;
    }
于 2014-03-15T14:03:16.430 回答