3

我正在使用基于 PHP 的通用 CMS,我想创建一个脚本来读取 pdf 创建缩略图并缓存它。有很多不同的答案,我确实对不同版本的 imagick 有一些问题,但这是对我有用的脚本。

有些人可能会觉得它很有用,如果优化了,也许有人可以建议我?

<?php

$loc = *the file location*;
$pdf = *the file name*;
$format = "jpg";
$dest = "$loc$pdf.$format";

if (file_exists($dest))
        {
        $im = new imagick();
        $im->readImage($dest);
        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
        }
else
    {
        $im = new imagick($loc.$pdf.'[0]');
        $im->setImageFormat($format);

        $width = $im->getImageheight();
        $im->cropImage($width, $width, 0, 0);
        $im->scaleImage(110, 167, true);

        $im->writeImage($dest);

        header( "Content-Type: image/jpg" );
        echo $im;
        exit;
    }

?>
4

3 回答 3

2

利用 PHP 和 ImageMagick 创建 PDF 缩略图

http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/

在本文中,我们讨论使用 PHP 和 ImageMagick 从给定的 PDF 生成缩略图,将它们存储在临时(或“缓存”)目录中,并将它们提供给网络。

我们最近的一位客户请求显示通过我们为他们部署的 Joomla CMS 发布的 PDF 缩略图。

需求相当简单,但执行起来有点复杂。在安装 ImageMagick、ImageMagick PHP 绑定(顺便说一句不工作,并设计了一种解决方法)并调查了一些代码之后,确定了以下解决方案:

<?php
function thumbPdf($pdf, $width)
{
    try
    {
        $tmp = 'tmp';
        $format = "png";
        $source = $pdf.'[0]';
        $dest = "$tmp/$pdf.$format";

        if (!file_exists($dest))
        {
            $exec = "convert -scale $width $source $dest";
            exec($exec);
        }

        $im = new Imagick($dest);
        header("Content-Type:".$im->getFormat());
        echo $im;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}

$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
    thumbPdf($file, $size);
}
?>

上面的代码假设你已经为临时目录提供了适当的权限(通常是 chmod 755 或 chmod 777,取决于你的勇气),你已经将上面的代码片段保存在一个名为 thumbPdf.php 的文件中,并放置这在您的网络服务器上可见的某个地方。

从 GET 获取参数后,代码检查目标临时目录,如果所需的图像不存在,则使用 ImageMagick 的转换程序生成 PDF 缩略图,缩小到适当的比例,并将图像保存在临时目录中。最后,它将缩略图重新加载到 ImageMagick PHP 对象中,并将内容输出到浏览器。

调用上述代码相当容易;只需从图像标签内调用 PHP 脚本,如下所示:

<img src="/path/to/thumbPdf.php?pdf=your.pdf&size=200" />

上面的代码将从“your.pdf”的第一页生成一个缩略图,大小为 200 像素宽和适当比例的高度。

祝你好运,快乐的网站管理员!

于 2012-10-08T14:34:19.867 回答
2

I know it's been discussed here:

Should I use a PHP extension for ImageMagick or just use PHP's Exec() function to run the terminal commands?

And to quote drew101:

You would benefit a lot using the PHP extensions instead of using exec or similar functions. Built in extensions will be faster and use less memory as you will not have to spawn new processes and read the output back. The image objects will be directly available in PHP instead of having to read file output, which should make the images easier to work with.

If you have a busy site, creating lots of processes to edit images may start to slow things down and consume additional memory.

于 2012-10-09T17:10:23.623 回答
1

如果您由于某种原因没有安装 Imagick php 库,您可以使用 ghost 脚本并使用以下示例生成 pdf 的缩略图:

exec('gs -dSAFER -dBATCH -sDEVICE=jpeg -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -r300 -sOutputFile=xyz.jpg xyz.pdf');
于 2015-09-04T12:59:24.100 回答